Когда использовать перенаправления и типы результата цепочки в 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>