struts2 - comprendre la valeur de la pile
J'ai une question concernant la struts2 valeur de la pile. Disons que j'ai une classe d'Action appelé RegisterAction
qui a une méthode execute comme suit:
public String execute() {
ValueStack stack = ActionContext.getContext().getValueStack();
stack.push(new String("test string"));
return SUCCESS;
}
Mon struts.xml ressemble à ceci:
<struts>
<package name="default" extends="struts-default">
<action name="*Register" method="{1}" class="vaannila.RegisterAction">
<result name="populate">/register.jsp</result>
<result name="input">/register.jsp</result>
<result name="success">/success.jsp</result>
</action>
<action name="*Test" method="{1}" class="vaannila.TestAction">
<result name="test">/test.jsp</result>
<result name="success">/success2.jsp</result>
</action>
</package>
</struts>
Sorte de contrôle de flux pour le succès.jsp après la méthode execute exécute dans cette classe.
Mes questions sont:
1) comment puis-je obtenir cette valeur j'ai poussé sur la pile dans l' success.jsp
?
2) disons que dans success.jsp
j'ai un <s:submit method="testMethod" />
qui redirige vers une classe d'action appelé TestAction
. En d'autres termes, à partir de la page du Registre, l'utilisateur clique sur envoyer, et dans la méthode execute de l' RegisterAction
nous pousser à la "chaîne de test" sur la pile. Puis nous allons à success.jsp
. Le success.jsp
a un bouton submit qui nous oriente vers TestAction#testMethod
. Dans TestAction#testMethod
, est la valeur que j'ai poussé sur la pile dans RegisterAction#execute
toujours là? Comment puis-je l'obtenir? Je traversai le débogueur eclipse mais je ne vois pas la valeur.
Grâce.
OriginalL'auteur dcp | 2009-11-26
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai compris cela.
1) La façon que j'ai trouvée pour obtenir des objets sur la valeur de la pile de sorte que nous pouvons y accéder à partir d'une jsp est comme ceci:
En d'autres termes, on peut mettre une table de hachage sur la valeur de la pile contenant les objets dont nous avons besoin. Puis, dans la page jsp, on peut accéder aux valeurs réelles comme ceci:
Il va chercher dans la valeur de la pile et de trouver ces valeurs dans la table de hachage, on a poussé.
2)
Une instance de la classe d'action est associé avec juste une demande. Alors, quand nous allons à une autre action et ensuite se retrouver dans une autre jsp, les trucs que nous avons poussé sur la valeur de la pile de la première action n'est pas là depuis l'autre action a sa propre valeur de la pile.
référence: http://www.manning-sandbox.com/thread.jspa?messageID=93045
Les gars, vous pouvez n'hésitez pas à me corriger si ce n'est pas bon ou si il y a des façons plus intelligentes à faire ces choses :).
Grâce.
OriginalL'auteur
Struts 2 ajoute votre action vers le haut de la valeur de la pile lors de l'exécution. Donc, la manière habituelle de mettre des trucs sur la Valeur de la Pile est d'ajouter des getters/setters pour les valeurs de votre classe d'Action. Vous utilisez toujours la s:la balise de propriété pour accéder aux valeurs.
Un CRUD tutoriel: http://struts.apache.org/2.1.6/docs/crud-demo-i.html
OriginalL'auteur
il suffit de définir une propriété comme
dans votre action.
en jsp, vous pouvez accéder directement.
e.g
imprimé
OriginalL'auteur
Normalement, comme il dit, vous utilisez un champ dans votre action, car l'action est toujours sur le ValueStack. Toutefois, cela ne fonctionne pas si vous êtes à la rédaction de l'intercepteur code depuis l'intercepteur aura disparu au moment où le modèle (JSP/freemarker, etc) est invoquée. Là, vous avez besoin de mettre une sorte de haricot de java-comme l'objet sur le ValueStack, comme vous le faites ci-dessus.
OriginalL'auteur
Salut juste pour information
Ces est un inconvénient de l'utilisation de
getValueStack().getContext()
parfois, les données n'étaient pas disponibles .ftl (données était pas en ligne2, mais il a été à venir en ligne1) je ne sais pas vraiment la raison. Mais à l'aide de.getValueStack().set("resDTO",resDTO);
le problème a été résolu (données devenait remplie pour les deux fonctions).OriginalL'auteur