gpt4 book ai didi

ajax - Struts2 JSON 插件 : Adding ActionMessages, ActionErrors 和 FieldErrors 响应

转载 作者:行者123 更新时间:2023-12-02 03:20:12 24 4
gpt4 key购买 nike

我正在制作 JQuery Ajax 帖子,并希望将任何 actionmessagesactionerrorsfielderrors 添加到响应中的操作中( 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":["您必须提供正确的信息。"]}

如果可能的话,我真的希望响应中包含操作错误和字段错误。

有什么想法吗?提前非常感谢您!!

编辑:
我想我可能需要使用某种正则表达式......我尝试过:

<result name="input" type="json">    
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors\[\d+\],actionErrors\[\d+\]</param>
</result>

结果相同:

{"actionErrors":[],"fieldErrors":{}}

我还发现了这个bug report ,这可能会导致我的问题,因为我使用的是 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>

我想我期望如果堆栈上有 fielderrors/actionerrors,它们会以 JSON 形式返回?

最佳答案

我找到了如何在 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>

我可以检查我的 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;
}

或按如下方式循环它们:

if ( json.actionErrors != null && json.actionErrors.length !== 0 ) {  
$.each(json.actionErrors, function(e) {
doStuff(this);
});
}

关于ajax - Struts2 JSON 插件 : Adding ActionMessages, ActionErrors 和 FieldErrors 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5427497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com