我可以在不同的操作类之间传播struts2 ActionErrors吗?

sk.*_*sk. 11 java error-handling model-view-controller struts struts2

如果我有一个动作,其结果是redirectAction到另一个类中的另一个动作,是否有可能在结果动作中显示验证错误?例如,在下面的示例中,如果用户执行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>
Run Code Online (Sandbox Code Playgroud)

小智 11

Struts2默认有一个商店拦截器.它在STORE模式下将actionMessages,actionErrors和fieldErrors存储在会话中,您可以通过在RETRIEVE模式下使用相同的拦截器在下一个重定向中检索相同的内容.更多细节可以在这里找到


sam*_*ina 7

基本上你必须使用名为store的预定义拦截器,它接受operationMode:store和retrieve:

<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>
Run Code Online (Sandbox Code Playgroud)


小智 6

我找到了一个更好的解决方案,可以在actionRedirect结果类型上传递操作错误和消息.它对我有用.

<action name="action1" class="action.Action1" >
    <result>/abc.jsp</result>
    <result name="input" type="redirectAction">
    <param name="actionName">action2</param>
    <param name="param1">${param1}</param>
    <param name="param2">${param2}</param>
    <param name="actionErrors">${actionErrors}</param>
    </result>
    </action>
    <action name="action2" class="action.Action2" >
    <result>/def.jsp</result>
    <result name="input">/def.jsp</result>
     </action/>
Run Code Online (Sandbox Code Playgroud)

这就是.....快乐的编码


Bri*_*ger 4

可能有一种方法可以做到这一点,但我不认为这是使用 struts 的一个很好的方法。如果 actionA 验证失败,您很可能希望有一个显示错误的非重定向输入结果,或者可能有一个可以显示错误的全局错误页面。

我想您可以将操作错误存储在重定向之间的会话之类的地方,但您不会真正使用框架的设计方式。