2009-04-24 50 views
8

Tengo la siguiente pregunta: Necesito pasar un parámetro (por ejemplo ID) cuando termino un formulario y la acción guarda los valores del formulario, esto se enviará al resultado = "éxito" y necesito que la acción que se llamará en el éxito venga con el ID y otros parámetros para usar más adelante en el siguiente formulario para guardar esta información (info-form2 e info.form1) ...Struts 2: parámetros entre Acciones

por ejemplo:

FORM1 (USUARIO) ==== "éxito" ====> FORM2 (DIRECCIÓN)

userForm.html ===================> addressForm.html? User_id = X ... (donde X: Id pasado tiro de UserAction (método: guardar) a AddressAction (método: newAddress))

favor me apreciará su ayuda

Gracias de antemano

Respuesta

29

Usó la palabra "reenviar" pero parece que desea ir a una página nueva (dirección.html) para recopilar más información sobre la dirección. Si este es el caso, debe redirigir a la página de dirección una vez que finalice la acción del usuario.

<action name="user" class="UserAction"> 
    <!-- Redirect to another namespace --> 
    <!-- for Struts 2.2 --> <result type="redirectAction"> 
    <!-- for Struts 2.0 <result type="redirect-action"> --> 
    <param name="actionName">collect-address</param> 
    <param name="userId">${userId}</param> 
    </result> 
</action> 

El ID de usuario $ {} sintaxis llamará getUserId en su UserAction y pasar ese parámetro como se mostró en su pregunta:? AddressForm.html user_id = X. collect-address puede tener un resultado exitoso que se dirija a addressForm.html. Docs here. Si desea evitar el uso de otra acción, puede probar using the result type="redirect" y pasar las cosas por ese camino.

Si realmente desea reenviar, puede usar action chaining. Esto es discouraged by Ted Husted on the Struts2 team pero puede funcionar para usted.

En lugar de cadena de acción, intente llevar todo el código para completar esta solicitud en una sola acción y utilice clases de ayuda o servicio para Usuario y Dirección para separar y reutilizar el código en lugar de "acción encadenada".

+0

Barett, que pruebe la solución de la forma en que busco en los libros y las especificaciones y puntales No tengo éxito ... en la forma ... cuando presiono ENVIAR ... el usuario se guarda mediante el método ("guardar" de acción: Acción de usuario), y pongo this.id = user.getId(); antes del "ÉXITO" y las mismas oraciones como las que mencionaste arriba y en la siguiente acción, el ID del parámetro aparece en blanco o cuando puse request.getParameter ("id"), viene nulo ...:(¿tiene algún acercamiento a mi problema? ... Apreciaría demasiado ... –

+0

... otro pensamiento para mi problema es: estoy obteniendo el valor de id más tarde de guardar el objeto USUARIO ... esto id se genera por hibernación al objeto y más tarde este objeto tendrá la ID generada ... pero necesito que esta ID generada pase a la otra acción ... pero parece que la ID no se genera mientras se ejecuta el método SAVE .... : S ... cualquiera ayuda ¡Estaré contento! –

+0

Tengo el mismo problema ... aparece en blanco o nulo cuando intento pasar la variable de esta manera ... si, en cambio, intento 1111 luego funciona – periback2

3
No

muy claro lo que quiere hacer.

Parece que después de la ejecución exitosa de una acción, la solicitud se reenvía a otra acción. En la primera acción, desea pasar el ID del parámetro y usarlo en la 2ª acción. Como ambas acciones se utilizan en la misma llamada de solicitud, puede guardar el parámetro ID en la solicitud como esta

request.setAttribute ("ID", iDValueObject);

En la segunda acción que se puede extraer el valor de ID como esto

request.getAttribute ("ID");

+2

Si está utilizando struts2, usted debe tratar de poner en práctica el ParameterAware y usarlo: D –

0

Esto debería funcionar:

<!-- Package Default --> 
    <package name="**default**" extends="struts-default,json-default" namespace="/"> 
     <action name="noOp" class="com.web.myapp.action.NoOpAction"> 
      <result name="success" type="chain"> 
        <param name="requiresValidation">true</param> 
        <param name="actionName">userAuthentication</param> 
        <param name="namespace">/user</param> 
      </result> 
     </action> 
    </package> 
    <!-- Package User --> 
    <package name="user" extends="struts-default,json-default" namespace="/user"> 
    <action name="userAuthentication" class="com.web.myapp.action.AuthenticateAction"> 
    ... 
    </action> 
Cuestiones relacionadas