Доступ к классу Action в JSP с использованием Struts2 - PullRequest
2 голосов
/ 21 сентября 2011

Кто-нибудь знает, как легко получить доступ к классу Action в JSP при использовании Struts2? Хотя я знаю, что часто можно использовать теги Struts и OGNL, на самом деле я нахожу их запутанными (очевидно, из-за незнания) и, откровенно говоря, легче поддерживать Java в JSP (не говоря уже о том, что его легче объяснить новым программисты как все знают Java).

Я искал решения годами, и лучшее решение, которое я нашел, - это вызов статического метода из класса, который выглядит следующим образом:

public static BaseAction getCurrentAction(HttpServletRequest request) {
    OgnlValueStack ognlStack = (OgnlValueStack)request.getAttribute(org.apache.struts2.ServletActionContext.STRUTS_VALUESTACK_KEY);
    return (BaseAction)ognlStack.getRoot().get(0);
}

... который был бы в классе BaseAction, расширенном вашим собственным классом Action, так что в вашем JSP вы можете сказать:

<%
  MyAction action = (MyAction)BaseAction.getCurrentAction(request);
  String myValue = action.getMyValue();
%>

Однако все это кажется слишком сложным и предполагает точный порядок в OgnlValueStack - должен быть лучший способ, не так ли?

Большое спасибо за любой совет!

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Если вы не хотите использовать теги struts2, одинаково правильный подход - использовать теги JSTL.Эти теги поддерживаются Struts2, и я предполагаю, что большинство основных веб-фреймворков Java.

Настоятельно рекомендуется избегать сервлетов / скриптов в типичном бизнес-программировании с использованием любой Java Web Framework.

Вы, вероятно, уже знаете это, но чтобы получить свойство из действия, просто скажите:

<s:property value="myProperty"/>

Или в равной степени действительны с использованием JSTL (некоторые здесь даже сказали бы, что более корректно, поскольку представление больше не работаетзависит от Struts2)

<c:out value="${myProperty}" />

Мало кто из программистов (и я бы сказал, нет опытных программистов в Struts2), которым было бы сложнее понять, чем

<%
  MyAction action = (MyAction)BaseAction.getCurrentAction(request);
  String myValue = action.getMyValue();
%>
* 1013Горстка тегов, необходимых для создания страницы, вам нужно получить свойства, выполнить итерацию для создания таблиц / списков, и это все.Изучение этих нескольких тегов сэкономит много времени.
2 голосов
/ 22 сентября 2011

Чтобы проверить ответ Quaternion, вы можете получить доступ к любому общедоступному методу в вашем классе действий из тегов OGNL или JSTL, как он предложил.

Вы также можете передать параметры в класс действия через теги:

public String getHello(String value){
    return "Hello " + value + "!";
}

Который вызывается на JSP:

<s:property value="getHello('Russell')"/>

Какие выходы:

Hello Russell!
...