1

你能告诉我如何获取操作异常,将它们转换为 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时。

要序列化我在下面添加的 excption:

<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>


当我提交包含无效数据的表单时,表单会正确验证。当出现异常时,页面不会序列化 json 结果。

在调试期间,我发现对服务器进行了两次 json 调用,其中一次调用:

  1. 所有表单数据
  2. struts.enableJSONValidation
  3. struts.validateOnly

一个只有所有的数据

4

1 回答 1

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。

于 2013-12-17T06:33:30.690 回答