2009-04-24 6 views
8

J'ai la question suivante: Je dois passer un paramètre (par exemple ID) quand je termine un formulaire et l'action enregistre les valeurs du formulaire, cela redirigera vers le résultat = "succès" et j'ai besoin que l'action qui sera appelée dans le succès viennent avec l'ID et d'autres paramètres à utiliser plus tard dans le formulaire suivant pour enregistrer cette information (info-form2 et info.form1) ...Struts 2: paramètres entre les actions

par exemple:

FORM1 (USER) ==== "succès" ====> FORM2 (adresse)

userForm.html ================> addressForm.html? User_id = X ... (où X: Id a passé throw de UserAction (méthode: save) à AddressAction (méthode: newAddress))

S'il vous plaît j'appréciera votre aide

Merci à l'avance

Répondre

29

Vous avez utilisé le mot "transférer", mais il semble que vous souhaitiez accéder à une nouvelle page (adresse.html) pour collecter plus d'informations sur l'adresse. Si c'est le cas, vous devez rediriger vers la page d'adresse une fois l'action de l'utilisateur terminée.

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

La syntaxe $ {} userId appellera GetUserID sur votre useraction et passer ce paramètre que vous montriez votre question: addressForm.html user_id = X. collect-address peut avoir un résultat de succès qui va à addressForm.html. Docs here. Si vous voulez éviter d'utiliser une autre action, vous pouvez essayer using the result type="redirect" et passer les choses de cette façon. Si vous voulez vraiment transférer, vous pouvez utiliser action chaining. Ceci est discouraged by Ted Husted on the Struts2 team mais cela peut fonctionner pour vous. Au lieu d'enchaîner les actions, essayez d'amener tout le code pour compléter cette requête en une seule action et utilisez des classes d'assistance ou de service pour l'utilisateur et l'adresse pour séparer et réutiliser le code au lieu de "chaînage d'action".

+0

Barett, je teste votre solution que je recherche dans les livres et les spécifications des entretoises et Je n'ai pas de succès ... dans le formulaire ..quand j'appuie sur SOUMETTRE ..l'utilisateur est sauvegardé par la méthode ("save" de l'action: UserAction), et je mets this.id = user.getId(); avant le "SUCCESS" et les mêmes phrases que vous avez mis ci-dessus et dans l'action suivante, l'identificateur de param apparaît vide ou quand je mets request.getParameter ("id") il vient null ....:(avez-vous une certaine approche à mon problème? ... J'apprécierai trop .... –

+0

... autre pensé à mon problème est: je reçois la valeur d'identification plus tard de sauver l'objet USER ... ceci id est généré par hibernate à l'objet et plus tard cet objet aura l'ID généré .... mais j'ai besoin de cet ID généré pour passer à l'autre action ... mais il semble que l'ID n'est pas généré pendant que la méthode SAVE est en cours d'exécution : S ... tout aide je serai heureux! –

+0

J'ai le même problème .. il semble vide ou nul quand j'essaie de passer la variable de cette façon .. si, à la place, je tente 1111 alors ça marche – periback2

3

Pas très clairement ce que vous voulez faire.

Après une exécution réussie d'une action, la requête est transmise à une autre action. Dans la première action, vous voulez passer l'identifiant du paramètre et l'utiliser dans la 2ème action. Comme les deux actions sont utilisées dans le même appel de requête, vous pouvez enregistrer le paramètre ID dans la requête comme suit:

request.setAttribute ("ID", iDValueObject);

Dans la deuxième action, vous pouvez extraire la valeur d'ID comme celui-ci

request.getAttribute ("ID");

+2

Si vous utilisez struts2, vous devriez essayer de mettre en œuvre la ParameterAware et de l'utiliser: D –

0

Cela devrait fonctionner:

<!-- 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> 
Questions connexes