Accéder à une Action de classe dans la JSP en utilisant Struts2
Personne ne sait comment accéder facilement à la classe d'Action dans une JSP lors de l'utilisation de Struts2? Alors que je sais qu'il est souvent possible d'utiliser des balises Struts et OGNL, je trouve à la fois à être source de confusion (de toute évidence en raison de l'ignorance), et franchement, de trouver plus facile à maintenir Java dans la page JSP (pour ne pas mentionner qu'il est plus facile d'expliquer à nouveau les programmeurs comme tout le monde le sait Java).
J'ai cherché des solutions depuis des années, et la meilleure solution que j'ai trouvé est d'appeler une méthode statique d'une classe, qui ressemble à ceci:
public static BaseAction getCurrentAction(HttpServletRequest request) {
OgnlValueStack ognlStack = (OgnlValueStack)request.getAttribute(org.apache.struts2.ServletActionContext.STRUTS_VALUESTACK_KEY);
return (BaseAction)ognlStack.getRoot().get(0);
}
...ce qui serait un BaseAction
classe prolongée par vous, une Action de classe, de sorte que, dans votre JSP, vous pouvez dire:
<%
MyAction action = (MyAction)BaseAction.getCurrentAction(request);
String myValue = action.getMyValue();
%>
Cependant tout cela semble trop compliqué et il suppose un ordre précis dans le OgnlValueStack
- il doit y avoir une meilleure façon, non?
Merci beaucoup pour tous les conseils!
- ${action.mavaleur}
- Ou
${myValue}
. Je trouve qu'il est presque inconcevable qu'un tag, et même OGNL, est si difficile à comprendre que vous auriez recours à des scriptlets. Sont-t-il des choses qui vous causent des problèmes? Si oui, peut-être qu'il serait plus judicieux d'adresse, que d'essayer de trouver des moyens d'écriture très suspect code pour faire les choses trivialement fournis à l'extérieur de la boîte. - Merci à tous! Clairement, c'est argumentatif de trucs, mais il se sent juste plus facile et plus naturel d'utiliser les scriptlets. ...et je vais vous avouer une ignorance - par exemple. Je ne comprends toujours pas quand utiliser #, $ et % et les différences. La chose est, je reçois java comme il est utilisé partout ailleurs et j'ai tendance à être un fan de minimiser le nombre de technologies utilisées dans le projet afin de garder la chose la plus simple.
- Un accidenté de démarreur. Utilisez # si les données dont vous avez besoin n'est pas dans l'action (c'est à dire à la séance), OGNL expressions de quoi être enveloppé par %{} mais où une expression de sens, il n'est pas nécessaire. ${} est une expression EL. La Documentation est votre ami: struts.apache.org/2.2.1.1/docs/tag-reference.html (Il y a beaucoup d'exemples, vous pouvez même couper et coller votre chemin même si les choses simples)
- Merci beaucoup Quanternion! Je suis très familier avec ce que la documentation et ont glané de connaissances pour de nombreux exemples - sauf si je suis aveugle au sens figuré (qui peut être possible) ce qui est manquant dans cette documentation est la rudesse de démarreur de connaissances que vous décrivez ci-dessus. Merci encore!
Vous devez vous connecter pour publier un commentaire.
Si vous ne souhaitez pas utiliser struts2 balises tout aussi valable approche consiste à utiliser les balises JSTL. Ces balises sont pris en charge par struts2 et je devine que la plupart des principaux frameworks web java.
Il est fortement recommandé d'éviter de servlets/scriplets dans typique de l'entreprise de programmation de l'aide de tout Framework Web Java.
Vous le savez probablement déjà, mais pour obtenir une propriété de l'action, il suffit de dire:
Ou tout aussi valable à l'aide de la JSTL (certains ici dirais même plus valable que la vue ne dépend plus de struts2)
Il y a peu de programmeurs (et je me tiendrai à dire non assaisonné struts2 programmeurs) qui trouverait le plus difficile à comprendre qu'
Il ya seulement une poignée de balises nécessaires pour générer une page, vous avez besoin pour obtenir des propriétés, itérer à produire des tableaux/listes et c'est à ce sujet. Le temps d'apprendre ces quelques balises permettra d'économiser beaucoup de temps.
À suivre sur les Quaternions de réponse, vous pouvez accéder à une méthode publique dans votre classe d'action de OGNL ou balises JSTL comme il l'a suggéré.
Vous pouvez également passer des paramètres à la classe de l'action par le biais de la tags:
Qui est appelé la JSP:
Sorties:
<s:property value="hello"/>
, qui chat le getter de la propriétéhello
.