我有一个在服务器端使用Struts2的项目,我正在尝试使用jqGrid(使用JSON格式)。我有几个用jqGrid制作的表,我正在使用navGrid中的添加/编辑/删除按钮。
我遇到的主要问题是服务器验证错误消息。我创建了自定义验证器,它们使用s:fielderror处理jsp页面,但我不知道如何使它们适用于从jqGrid添加/编辑弹出窗口。我知道jqGrid在客户端为用户提供自定义验证,但这有其局限性(考虑测试用户的电子邮件是否是唯一的,你必须使用数据库,或者如果某些字段相互依赖,必须一起测试,如果isManager为true,那么managerCode必须不为空,反之亦然......)。
当我使用客户端验证时,只要发生错误,就会在添加/编辑窗口中显示一条消息。我可以以同样的方式在窗口中以某种方式显示我的服务器验证错误消息吗?
答案 0 :(得分:3)
我设法解决了这个问题。我将解释如何使用简单的自定义验证器进行年龄字段,其必须是> 18为员工。接下来认为验证器已经在validators.xml中声明并映射到该操作上,并且在ValidationException的情况下该消息是“员工应该早于18岁。”。
使用Firebug,我发现表单中错误区域的id是FormError。可以在jqgrid中配置回调函数errorTextFormat,以便从服务器获取响应并对其进行处理。在jqgrid配置中,可以编写
errorTextFormat : errorFormat,
与
var errorFormat = function(response) {
var text = response.responseText;
$('#FormError').text(text); //sets the text in the error area to the validation //message from the server
return text;
};
现在问题是服务器将隐式发送包含整个异常堆栈跟踪的响应。为了解决这个问题,我决定创建一个新的结果类型。
public class MyResult implements Result {
/**
*
*/
private static final long serialVersionUID = -6814596446076941639L;
private int errorCode = 500;
public void execute(ActionInvocation invocation) throws Exception {
ActionContext actionContext = invocation.getInvocationContext();
HttpServletResponse response = (HttpServletResponse) actionContext
.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse");
Exception exception = (Exception) actionContext
.getValueStack().findValue("exception");
response.setStatus(getErrorCode());
try {
PrintWriter out = response.getWriter();
out.print(exception.getMessage());
} catch (IOException e) {
throw e;
}
}
/**
* @return the errorCode
*/
public int getErrorCode() {
return errorCode;
}
/**
* @param errorCode the errorCode to set
*/
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
}
它还必须在struts.xml中配置如下:
<package name="default" abstract="true" extends="struts-default">
...
<result-types>
<result-type name="validationError"
class="exercises.ex5.result.MyResult">
</result-type>
</result-types>
...
<action name="myaction">
...
<result name="validationException" type="validationError"></result>
<exception-mapping result="validationException"
exception="java.lang.Exception"></exception-mapping>
</action>
...
</package>
以下是我在添加/编辑窗口中获取验证错误消息的步骤,现在它可以正常工作。