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!
InformationsquelleAutor Alex | 2011-09-21