ica*_*ats 12 validation ajax plugins json struts2
我正在制作JQuery Ajax帖子,并希望任何actionmessages,actionerrors并fielderrors在响应中添加到操作中(以JSON格式).
我添加了这个结果:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors,actionErrors</param>
</result>
Run Code Online (Sandbox Code Playgroud)
到我的动作配置struts.xml.
我得到了:{"actionErrors":[],"fieldErrors":{}}尽管在值堆栈上存在字段错误,但作为响应返回.
如果我将结果配置更改为:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="root">fieldErrors</param>
</result>
Run Code Online (Sandbox Code Playgroud)
JSON响应是我预期的::
{"thePropertyWithValidationError":["You must supply correct information."]}
如果可能的话,我真的希望响应中包含操作错误和字段错误.
有任何想法吗?非常感谢你提前!!
编辑:
我想我可能需要利用某种正则表达式......我试过:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors\[\d+\],actionErrors\[\d+\]</param>
</result>
Run Code Online (Sandbox Code Playgroud)
结果相同:
{"actionErrors":[],"fieldErrors":{}}
Run Code Online (Sandbox Code Playgroud)
我还发现了这个错误报告,当我使用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>
Run Code Online (Sandbox Code Playgroud)
我发布:
{"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>
Run Code Online (Sandbox Code Playgroud)
我想我期待如果堆栈上有fielderrors/actionerrors,它们将作为JSON返回?
ica*_*ats 10
我想出了如何在JSON结果中返回ActionErrors,ActionMessages和FieldErrors!
下面是一个示例包 - 我设置了一个全局错误处理程序,它将操作错误,字段错误和操作消息吐出为JSON:
<!--myBase has interceptor stack defined-->
<package name="JsonResults" namespace="/json" extends="myBase">
<global-results>
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">actionErrors\[\d+\], fieldErrors\..+$, actionMessages\[\d+\]</param>
</result>
<result name="error" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">actionErrors\[\d+\], fieldErrors\..+$, actionMessages\[\d+\]</param>
</result>
<result name="Exception" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">actionErrors\[\d+\], fieldErrors\..+$, actionMessages\[\d+\]</param>
</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Throwable" result="Exception" />
</global-exception-mappings>
<!-- sample action -->
<action name="SampleAction" method="loadSamples" class="com.sample">
<result name="success" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">sampleComplexBean\[\d+\]\..+$, actionMessages\[\d+\]</param>
</result>
</action>
</package>
Run Code Online (Sandbox Code Playgroud)
如果存在操作错误或字段错误,我可以检查我的JQuery Javascript:
/**
* Checks the passed in json and searches for the
* existence of an "actionErrors" or "fieldErrors" objects
*
* @param json The JSON to check for errors
* @returns {Boolean} true if errors exist; false otherwise
*/
function areActionOrFieldErrorInJson(json) {
var errorsExist = false;
if ( json != null && ( json.actionErrors != null || json.fieldErrors != null ) ) {
errorsExist = true;
}
return errorsExist;
}
Run Code Online (Sandbox Code Playgroud)
或循环遍历它们如下:
if ( json.actionErrors != null && json.actionErrors.length !== 0 ) {
$.each(json.actionErrors, function(e) {
doStuff(this);
});
}
Run Code Online (Sandbox Code Playgroud)
可以使用以下命令略微缩短includeProperties参数:
<result name="error" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">
actionErrors.*,
actionMessages.*,
fieldErrors.*
</param>
</result>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10489 次 |
| 最近记录: |