解决jqGrid新增或编辑记录保存成功但提示错误的问题
2009-12-14 14:58
525 查看
在上一篇文章《》中,我们详细说明了一下如何创建一个可以使用增删改操作的jqGrid。
但是在实际的修改、新增保存中,会看到如下的错误提示:error Status:"OK".Error code: 900。实际上,修改(新增)的记录已经正确的保存到数据库中了。见下图:
这是为什么呢?一直为这个问题头痛苦恼了好几天。仔细阅读了jqGrid wiki上的文档,也google了许多的文章,仍然找不到相应的说明或者解决办法。
后来研究了一下jqGrid的源代码。src/grid.formedit.js文件,发现其中有一个函数postIt,其中有如下的代码:
if(Status != "success") {
ret[0] = false;
if ($.isFunction(rp_ge.errorTextFormat)) {
ret[1] = rp_ge.errorTextFormat(data);
} else {
ret[1] = Status + " Status: '" + data.statusText + "'. Error code: " + data.status;
}
} else {
// data is posted successful
// execute aftersubmit with the returned data from server
if( $.isFunction(rp_ge.afterSubmit) ) {
ret = rp_ge.afterSubmit(data,postdata);
}
}
看来问题是在这个地方。由此猜想jqGrid的增删改操作是要求服务器返回内容的。
我猜测,jqGrid要求服务器返回包含成功与否的status内容。所以我修改了一下Action的类方法的返回值:如下:
public String modifyBrand()
{
String result = "success";
try
{
MProductBrand mpb = new MProductBrand();
mpb.setBrandName(brandName);
mpb.setCode(code);
mpb.setStatus(status);
mpb.setLastModifiedDatetime(new Timestamp(System.currentTimeMillis()));
if(oper != null && oper.equals("edit")){ //编辑
mpb.setBrandId(new Integer(id));
this.brandService.modifyBrand(mpb);
}
else if (oper != null && oper.equals("add")){ //新增
MProductBrand mproductbrand1 = this.brandService.locateByBrandcode(mpb
.getCode().toString().trim().toUpperCase());
MProductBrand mproductbrand2 = this.brandService.locateByBrandName(mpb
.getBrandName().toString().trim());
if (mproductbrand1.getBrandId() == null && mproductbrand2.getBrandId() == null) //检查是否存在
{
this.brandService.addBrand(mpb);
}
else
{
log.warn("品牌代码或品牌名称已经存在");
result = "error";
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
log.warn("修改失败");
result = "error";
}
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/json; charset=UTF-8");
try{
PrintWriter out = response.getWriter();
JSONObject json = new JSONObject();
json.put("status", result);
out.print(json.toString());
}
catch(Exception e){
e.printStackTrace();
log.error("Error:Cannot create PrintWriter Object !");
}
return null;
}
再次执行,发现保存成功之后,编辑窗口自动关闭,页面自动重新加载。很好!
不过我一直在疑惑,到底服务器要怎么返回呢???仔细看了看jqGrid的Demo,想通过研究php文件来看看例子中是如何做的,也没有找到。并且,jqGrid Demo的编辑例子,是不实际向服务器提交修改内容的。说是为了安全原因......
但是在实际的修改、新增保存中,会看到如下的错误提示:error Status:"OK".Error code: 900。实际上,修改(新增)的记录已经正确的保存到数据库中了。见下图:
这是为什么呢?一直为这个问题头痛苦恼了好几天。仔细阅读了jqGrid wiki上的文档,也google了许多的文章,仍然找不到相应的说明或者解决办法。
后来研究了一下jqGrid的源代码。src/grid.formedit.js文件,发现其中有一个函数postIt,其中有如下的代码:
if(Status != "success") {
ret[0] = false;
if ($.isFunction(rp_ge.errorTextFormat)) {
ret[1] = rp_ge.errorTextFormat(data);
} else {
ret[1] = Status + " Status: '" + data.statusText + "'. Error code: " + data.status;
}
} else {
// data is posted successful
// execute aftersubmit with the returned data from server
if( $.isFunction(rp_ge.afterSubmit) ) {
ret = rp_ge.afterSubmit(data,postdata);
}
}
看来问题是在这个地方。由此猜想jqGrid的增删改操作是要求服务器返回内容的。
我猜测,jqGrid要求服务器返回包含成功与否的status内容。所以我修改了一下Action的类方法的返回值:如下:
public String modifyBrand()
{
String result = "success";
try
{
MProductBrand mpb = new MProductBrand();
mpb.setBrandName(brandName);
mpb.setCode(code);
mpb.setStatus(status);
mpb.setLastModifiedDatetime(new Timestamp(System.currentTimeMillis()));
if(oper != null && oper.equals("edit")){ //编辑
mpb.setBrandId(new Integer(id));
this.brandService.modifyBrand(mpb);
}
else if (oper != null && oper.equals("add")){ //新增
MProductBrand mproductbrand1 = this.brandService.locateByBrandcode(mpb
.getCode().toString().trim().toUpperCase());
MProductBrand mproductbrand2 = this.brandService.locateByBrandName(mpb
.getBrandName().toString().trim());
if (mproductbrand1.getBrandId() == null && mproductbrand2.getBrandId() == null) //检查是否存在
{
this.brandService.addBrand(mpb);
}
else
{
log.warn("品牌代码或品牌名称已经存在");
result = "error";
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
log.warn("修改失败");
result = "error";
}
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/json; charset=UTF-8");
try{
PrintWriter out = response.getWriter();
JSONObject json = new JSONObject();
json.put("status", result);
out.print(json.toString());
}
catch(Exception e){
e.printStackTrace();
log.error("Error:Cannot create PrintWriter Object !");
}
return null;
}
再次执行,发现保存成功之后,编辑窗口自动关闭,页面自动重新加载。很好!
不过我一直在疑惑,到底服务器要怎么返回呢???仔细看了看jqGrid的Demo,想通过研究php文件来看看例子中是如何做的,也没有找到。并且,jqGrid Demo的编辑例子,是不实际向服务器提交修改内容的。说是为了安全原因......
相关文章推荐
- 解决公务车Bug:公安违章管理中编辑新增的公安违章记录,点击保存按钮报:数据库操作异常,null
- sql读写图片时Image.FromStream方法提示参数错误问题解决
- 关于解决属性文件中文编码错误不能保存的问题
- 打开MSN提示Windows Live Communication Platform遇到问题需要关闭错误的解决方法
- 解决android studio 代码不提示,错误不提示的问题
- IDEA编译时候出现问题:代码不提示错误,编译时出错解决办法
- 解决问题记录(2)-Oracle提示“无法解析指定的标示符”
- 网络打印机提示的“功能地址0x造成了一个保护错误”问题解决方案
- 解决Ubuntu 提示您可能需要运行apt-get update错误问题
- 完美解决PJ的Cookies保存时限问题!可选择记录登陆时长!
- Sublime Text3 解决编辑java保存后在cmd下运行中文显示乱码的问题
- 解决IE下返回json数据提示文件保存到问题
- 运行wmic提示Cli.mof阶段错误问题的解决办法
- Mac下SublimeText_编辑保存的Html乱码问题解决
- 从多方查找资源并测试终于解决了问题,特记录下。 其实如果在安装的时候,正确的安装,就不会出现下面的信息了. 如在Linux下安装,提示密码的时候,输入Root账号的密码就不会出现这个问题了!
- [总结]在VS中编辑修改资源视图后保存时提示-cannot change standard mfc resources ,无法保存资源视图的一个解决方法
- 记录一次eclipse的错误:“server tomcat v7.0 server at localhost was unable to start within 45 seconds”的问题解决思路
- 解决SharePoint中自定义新增和编辑List的页面时"增加附件"工作栏不能使用的问题
- 应用程序无法正常启动提示错误0xc000007b 问题的原因和解决方法
- 解决WIN7远程登录提示无法保存凭据的问题