2011-01-21 3 views
10

В моем проекте struts 2 при использовании действия перенаправления i m теряют все мои значения, такие как ошибка действия и ошибки поля.Когда использовать перенаправления и типы результата цепочки в struts2

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

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

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

+0

Вы не должны держать действия или полевые ошибки между запросами. Пожалуйста, подробно объясните, что вы пытаетесь сделать, чтобы мы могли помочь вам найти подходящее решение. –

ответ

12

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

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

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

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

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

1

Первый вариант

<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>