我正在进行 JQuery Ajax post 请求,希望任何 actionmessages
、actionerrors
和 fielderrors
都能以 JSON 格式添加到响应中的 action 中。
我添加了以下结果:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors,actionErrors</param>
</result>
我需要在struts.xml
中配置我的操作。
尽管值栈上存在字段错误,但我得到的响应是:{"actionErrors":[],"fieldErrors":{}}
。
如果我将结果配置更改为:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="root">fieldErrors</param>
</result>
我期望的JSON响应是:
{"thePropertyWithValidationError":["您必须提供正确的信息。"]}
如果可能的话,我希望响应中包含动作错误和字段错误。
有什么想法吗?非常感谢您的帮助!
编辑:
我认为我可能需要使用某种正则表达式……我尝试过:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors\[\d+\],actionErrors\[\d+\]</param>
</result>
具有相同的结果:
{"actionErrors":[],"fieldErrors":{}}
我还发现了这个错误报告,可能与我的问题有关,因为我正在使用Struts v2.2.1。(v2.2.2尚未发布)
编辑#2:
也许JSONValidationInterceptor是我需要的...我似乎无法弄清楚如何将其与我的自定义JQuery Ajax帖子一起使用...
我正在使用json拦截器来填充我的属性-以下是我的操作配置:
<action name="MyAction" method="add" class="com.test.actions.MyAction">
<interceptor-ref name="json" />
<interceptor-ref name="jsonValidationWorkflowStack"/>
<interceptor-ref name="MyCustomInterceptor" />
<result name="success" type="json" />
</action>
我正在发布:
{"struts.enableJSONValidation":"true", "testProperty":"true"}
响应只是转发到我的全局结果映射,error.jsp(其中字段错误按我设置的方式显示在error.jsp中):<global-results>
<result name="error">/WEB-INF/jsp/error.jsp</result>
<result name="Exception">/WEB-INF/jsp/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Throwable" result="Exception" />
</global-exception-mappings>
我猜想如果堆栈上存在字段错误/操作错误,它们将作为JSON返回?