是否可以在不同的操作类之间传播 struts2 操作错误?

如果我的某个操作的结果是重定向到不同类中的另一个操作的操作,是否可以在生成的操作中显示验证错误?例如,在下面的示例中,如果用户执行 actionA(没有与之关联的视图),并且存在错误,有没有办法在 actionB 结果 (foo.jsp) 中显示这些错误?还是我以完全错误的方式这样做?

<package name="a" extends="struts-default" namespace="/a">
    <action name="actionA" class="actionAClass">
        <result name="input" type="redirectAction">
            <param name="actionName">actionB</param>
            <param name="namespace">/b</param>
        </result>
        <result type="redirectAction">
            <param name="actionName">actionB</param>
            <param name="namespace">/b</param>
        </result>
    </action>
</package>
<package name="b" extends="struts-default" namespace="/b">
    <action name="actionB" class="actionBClass">
        <result>/foo.jsp</result>
    </action>
</package>

答案 1

默认情况下,Struts2 具有存储拦截器。它将操作消息、操作错误和字段错误存储在存储模式下的会话中,您可以在下一个重定向中通过在 RETRIEVE 模式下使用相同的侦听器来检索相同的内容。更多细节可以在这里找到


答案 2

基本上,您必须使用称为store的预定义拦截器,该拦截器采用操作模式:存储和检索:

<package name="a" extends="struts-default" namespace="/a">
    <action name="actionA" class="actionAClass">
        <!-- Here you are storing the Error messages -->
        <interceptor-ref name="store">
            <param name="operationMode">STORE</param>
        </interceptor-ref>

        <!-- include your default stack in case you need to load other interceptors -->
        <interceptor-ref name="defaultStack" />

        <result name="input" type="redirectAction">
            <param name="actionName">actionB</param>
            <param name="namespace">/b</param>
        </result>
        <result type="redirectAction">
            <param name="actionName">actionB</param>
            <param name="namespace">/b</param>
        </result>
    </action>
</package>
<package name="b" extends="struts-default" namespace="/b">
    <action name="actionB" class="actionBClass">

        <interceptor-ref name="store">
            <param name="operationMode">RETRIEVE</param>
        </interceptor-ref>

        <!-- include your default stack in case you need to load other interceptors -->
        <interceptor-ref name="defaultStack" />

        <result>/foo.jsp</result>
    </action>
</package>

推荐