strust 2(jquery插件)将动作异常显示为ajax错误

时间:2013-11-12 16:42:49

标签: jquery struts2 struts2-json-plugin

您能告诉我如何获取操作异常,转换并将其作为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调用,其中一次调用:

  1. 所有表单数据
  2. struts.enableJSONValidation
  3. struts.validateOnly
  4. 只有一个用于数据的

1 个答案:

答案 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了。