2011-01-21 13 views
10

En mis puntales 2 proyecto utilizando redirigir acción i M perder todas mis valores tales como errores de error de acción y de campo.Cuándo utilizar redirección y resultado cadena tipos en struts2

lo busqué en la red y encontré 2 opciones

  • Cadena - Esto no se utiliza mucho i donno qué ..
  • MessageStoreInterceptor - Esto tiene que ser colocado en cada acción

Así puede cualquiera, por favor hágamelo saber cuando se redirigir (o RedirectAction) preferido y cuando se prefiere cadena.

+0

No debería ser necesario para mantener los errores de acción o en el campo entre las peticiones. Explique en detalle lo que está tratando de hacer para que podamos ayudarlo a encontrar la solución adecuada. –

Respuesta

12

Al redirigir una acción se pierde la pila de valores actual (cualquier cosa en el alcance de la solicitud) por supuesto puede configurar su acción para preservar estos valores pasandolos como parámetros a la siguiente acción, pero es un poco molesto.

Cadena conserva la pila de valores, por lo que la siguiente acción puede funcionar en parámetros creados a partir de la acción anterior sin necesidad de pasarlos explícitamente, ya que con este efecto bola de nieve puede usar todos los parámetros en la vista.

Pero por lo general, se reconoce que una solución de arriba hacia abajo (tal vez de arriba hacia abajo no es la mejor palabra ... 'estructurado') es mejor que la construcción de un laberinto de acciones espagueti.

Así que cuando estás bajo presión para conseguir algo de trabajo y no demasiado familiarizados con struts2 a continuación, utilizar la cadena o redirección y, a continuación, definitivamente volver y arreglarlo! En general, debes usar un interceptor.

En el caso de una acción que encamine otras acciones basadas en alguna condición, sería mejor hacer que un interceptor aplicara eso a un paquete y colocar todas las acciones que requieran este comportamiento interesante en ese paquete. Entonces está muy claro a qué acciones se aplica esto.

1

La primera opción

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

Otra opción

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