您能告诉我如何获取操作异常,转换并将其作为json错误发送。我使用strust2 jquery插件用ajax验证我的表单。框架将通过定义sj:submit validate=true
和注释动作
<s:form action="login">
<s:textfield name="username" />
<s:textfield name="password" />
<sj:submit button="true" validate="true" />
</s:form>
行动是:
@Validations(requiredStrings =
{ @RequiredStringValidator(fieldName = "username", key = "validate.required"),
@RequiredStringValidator(fieldName = "password", key = "validate.required")}
public String confirm(){
service.canLogin(username,password)
}
canLogin
可能会抛出异常,例如。当它无法连接到数据库或shomething时。
序列化我在下面添加的摘要:
<global-results>
<result name="error.core" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">
actionErrors\[\d+\], fieldErrors\..+$,actionMessages\[\d+\]</param>
</result>
</global-results>
当我提交包含无效数据的表单时,表单会正确验证。当异常rasies时,页面没有序列化json结果。
在调试期间,我发现对服务器进行了两次json调用,其中一次调用:
只有一个用于数据的
答案 0 :(得分:0)
我终于找到了答案!希望对别人有用......
目标是捕获业务异常,并将其作为ajax验证异常显示给用户。
将sj:form
的目标设置为某个虚拟div分析,您的数据并执行您想要的操作。
jsp将是
<sj:submit button="true" targets="dummy"
validateFunction="formValidator" onBeforeTopics="removeErrors"
onSuccessTopics="formServerErrorAnalyze" validate="true"
key="form.btn.transfer" />
js将是
$.subscribe("formServerErrorAnalyze", function(event, data) {
var data = event.originalEvent.data;
if (data=='Some Exception from server')
{
//Do some thing to show error.
//eg: $("#formerrors").html(data)
}
else {
// Put the content of dummy node into content and remove dummy html
var working = $("#dummy").contents();
var ref = $("#content").contents();
$("#dummy").append(ref);
$("#content").append(working);
}
$("#dummy").html('');
});
struts-jquery中有一个错误。如果您未设置sj:submit
的目标,则代码onSuccessTopics
将无法触发!如果这个问题得到解决,你就不再需要虚拟div了。