2011-01-21 10 views
10

W moim projekcie 2 struts podczas korzystania z akcji przekierowania tracę wszystkie moje wartości, takie jak błąd działania i błędy w polu.Kiedy używać przekierowań i łańcuchów typów wyników w struts2

Sprawdziłem to na sieci i znalazłem 2 opcje

  • Chain - To nie jest używany bardzo mi donno dlaczego ..
  • MessageStoreInterceptor - Musi to być umieszczone w każdym działaniu

Więc może ktoś proszę dać mi znać, kiedy jest preferowane przekierowanie (lub RedirectAction) i kiedy jest preferowany łańcuch.

+0

Nie należy trzeba zachować działań lub błędów pola pomiędzy żądaniami. Wyjaśnij szczegółowo, co próbujesz zrobić, abyśmy mogli Ci pomóc znaleźć odpowiednie rozwiązanie. –

Odpowiedz

12

Przekierowanie akcji powoduje utratę aktualnego stosu wartości (cokolwiek w zakresie żądania). Można oczywiście ustawić akcję, aby zachować te wartości, przekazując je jako parametry do następnej akcji, ale jest to trochę uciążliwe.

Łańcuch zachowuje stos wartości, więc następna akcja może działać na parametrach utworzonych z poprzedniej akcji bez potrzeby jawnego ich przekazywania, również dlatego, że istnieje efekt kuli śnieżnej, można użyć wszystkich parametrów w widoku.

Ale powszechnie wiadomo, że odgórne rozwiązanie (może odgórne nie jest najlepszym słowem ... "uporządkowane") jest lepsze niż budowanie labiryntu akcji spaghetti.

Więc kiedy jesteś pod presją, aby uzyskać coś działającego i niezbyt dobrze znasz struts2, użyj łańcucha lub przekierowania, a następnie zdecydowanie wróć i napraw to! Generalnie powinieneś używać przechwytywacza.

W przypadku akcji, która kieruje do innych działań w oparciu o pewne warunki, lepiej byłoby, aby przechwytywacz zastosował to do pakietu i umieścił wszystkie działania wymagające tego interesującego zachowania w tym pakiecie. Wtedy jest bardzo jasne, jakie działania mają na to wpływ.

1

Pierwsza opcja

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

Inną opcją

<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> 
Powiązane problemy