Struts2 JSON 插件:添加 ActionMessages、ActionErrors 和 FieldErrors 到响应

2024-02-22

我正在制作 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 形式返回?


我弄清楚了如何在 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);  
    });  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Struts2 JSON 插件:添加 ActionMessages、ActionErrors 和 FieldErrors 到响应 的相关文章

随机推荐