Когда использовать перенаправления и типы результата цепочки в struts2

В моем проекте struts 2 при использовании действия перенаправления я теряю все мои значения, такие как ошибка действия и ошибки поля.

Я просмотрел его в сети и нашел 2 варианта

  • Chain - Это не используется много, я не знаю почему..
  • MessageStoreInterceptor - это нужно размещать в каждом действии

Так может кто-нибудь, пожалуйста, дайте мне знать, когда будет перенаправлено (или RedirectAction), и когда предпочтительна цепочка.

Ответ 1

Перенаправление действия теряет текущий стек значений (что-либо в области запроса), вы можете, конечно, настроить свое действие, чтобы сохранить эти значения, передав их в качестве параметров для следующего действия, но это немного боль.

Цепь сохраняет стек значений, поэтому следующее действие может работать с параметрами, созданными из предыдущего действия, без необходимости явно передавать их, так как это эффект снежного шара позволяет использовать все параметры в представлении.

Но общепризнано, что решение сверху вниз (возможно, сверху вниз не лучшее слово... "структурировано" ) лучше, чем создание лабиринта действий спагетти.

Итак, когда вы находитесь под давлением, чтобы получить что-то работающее и не слишком знакомое с struts2, используйте цепочку или перенаправление, а затем обязательно вернитесь и исправьте это! В общем, вы должны использовать перехватчик.

В случае действия, которое направляется на другие действия на основе некоторых условий, было бы лучше сделать, чтобы перехватчик применил это к пакету и поместил все действия, требующие этого интересного поведения в этом пакете. Тогда очень ясно, к каким действиям это относится.

Ответ 2

Первая опция

<action name="remove" class="com.action.firstAction" method="remove">
         <result name="success" type="redirectAction">
            secondaction
            <param name="actionName">secondaction</param>
            <param name="namespace">/</param>
            <param name="param name">${param value}</param>
        </result>           
    </action>
<action name="secondaction" class="com.action.secondAction" method="result">
    <result name="success">result.jsp</result>
</action>

Другой вариант

<action name="remove" class="com.action.firstAction" method="remove">
     <result name="success" type="chain">secondaction</result>
</action>
<action name="second action" class="com.action.secondAction" method="result">
    <result name="success">result.jsp</result>
</action>