我正在制作 JQuery Ajax 帖子,并且想要任何actionmessages
, actionerrors
, and fielderrors
添加到响应中的操作中(以 JSON 格式)。
我添加了这个结果:
<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":["You must supply correct information."]}
如果可能的话,我真的希望响应中包含操作错误和字段错误。
有任何想法吗?提前非常感谢!
Edit:
我想我可能需要使用某种正则表达式......我尝试过:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors\[\d+\],actionErrors\[\d+\]</param>
</result>
得到相同的结果:
{"actionErrors":[],"fieldErrors":{}}
我也发现了这个错误报告 https://issues.apache.org/jira/browse/WW-3397,这可能会导致我的问题,因为我使用的是 Struts v2.2.1。 (v2.2.2 尚未发布)
Edit #2:
也许是JSON 验证拦截器 http://struts.apache.org/2.1.2/struts2-core/apidocs/org/apache/struts2/interceptor/validaton/JSONValidationInterceptor.html是我需要的...我似乎不知道如何将它与我的自定义 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>
我想我期望如果堆栈上有 fielderrors/actionerrors,它们会以 JSON 形式返回?