Объект запроса не передается статическому методу с использованием OGNL в struts2

Я разрабатываю приложение Struts 2.3. В этом приложении я вызываю статический служебный метод из JSP, который принимает объект HttpServletRequest в качестве аргумента и возвращает строку после обработки запроса. Когда я попытался использовать сценарий JSP, метод был вызван с правильным аргументом, например:

<%
    String resultStr = com.testapp.util.Utility.getResult(request);
%> 

Но когда я попытался использовать OGNL для той же логики, метод был вызван с нулевым объектом запроса в качестве аргумента вместо фактического объекта запроса, например:

<s:set name="resultStr" var="resultStr"
       value="@com.testapp.util.Utility@getResult(request)" /> 

Я также пробовал #request вместо request в OGNL, но в этом случае метод не вызывался.


person Jaydeep Virani    schedule 29.05.2013    source источник


Ответы (1)


Поместите эту константу в файл конфигурации, чтобы разрешить доступ к статическим методам.

<constant name="struts.ognl.allowStaticMethodAccess" value="true" />

Использовать

<s:set name="resultStr" var="resultStr" value="@com.testapp.util.Utility@getResult()" /> 

и в getResult() {

HttpServletRequest request = ServletActionContext.getRequest();
person Roman C    schedule 29.05.2013
comment
Он уже настроен. Как я уже упоминал, я могу вызывать статический метод с помощью OGNL, но мне не передается request объект в методе. Это нулевое значение. - person Jaydeep Virani; 29.05.2013
comment
Вам это не нужно, используйте ServletActionContext.getRequest() - person Roman C; 29.05.2013
comment
Я попробовал HttpServletRequest request = ServletActionContext.getRequest(); вместо передачи объекта request, и это сработало :) Спасибо за вашу быструю помощь! Но я до сих пор не могу понять, почему объект request не был передан в качестве аргумента. - person Jaydeep Virani; 29.05.2013
comment
Вы не можете получить доступ к переменным сценария внутри тегов struts. - person Roman C; 29.05.2013