Как вызвать метод действия с помощью OGNL

Как вызвать метод действия с помощью OGNL?

helloAction.java

public String getQuote()
{
    return "Don't think, just do";
}

success.jsp

<b>quote() :</b> <s:property value="quote()"/> <br>

struts.xml

<action name="greet" class="com.struts2.helloAction" >
    <interceptor-ref name="firewallStack"></interceptor-ref>
    <result name="SUCCESS">/WEB-INF/resources/success.jsp</result>
    <result name="input">/WEB-INF/resources/success.jsp</result>
</action>

Я получил реф-ссылку с стойки 2 OGNL

Этот метод quote() не вызывается. Я использую xwork-2.0.1.jar и ognl-2.6.11.jar.


person Manish Basdeo    schedule 07.10.2013    source источник
comment
‹s:property value=quote()/› Должно быть ‹s:property value=getQuote()/›   -  person Amit Kumar    schedule 07.10.2013


Ответы (2)


Этот метод quote() не вызывается. Я использую xwork-2.0.1.jar и ognl-2.6.11.jar.

У вас нет этого метода в вашем действии. Если вы создадите его:

public String quote() {

и используйте обычный синтаксис вызова метода OGNL:

<s:property value="%{quote()}" />

тогда он будет вызываться по желанию.

Для получения подробной информации и синтаксиса вы можете прочитать Руководство по языку OGNL.

person Roman C    schedule 07.10.2013
comment
Не работает для меня. Одинаково ли звонить %{XXX} и ${XXX}? - person Hola Soy Edu Feliz Navidad; 28.03.2018
comment
Это не то же самое. См. это, если вам нужно знать разницу. - person Roman C; 24.03.2021

Ваш первоначальный синтаксис почти правильный, просто уберите скобки.

<s:property value="%{quote}" />

Конкуренция JavaBean более универсальна, чем явный вызов метода, например, используйте JSP EL:

${quote}

Соглашения JavaBean предпочтительнее, когда функция не принимает аргументов.

person Dave Newton    schedule 07.10.2013
comment
Это был не я, и я в целом думаю, что это должно быть предпочтительной практикой в ​​JSP, поскольку этот механизм всегда будет доступен. Но предпочитаемые нацисты, наверное, хотят ссылку. У вас есть доступ для записи к документации Struts? Вы должны просто добавить документ по этому поводу и поставить ссылку здесь, это было бы забавно. - person Quaternion; 08.10.2013
comment
@Quaternion Однажды кто-то упрекнул меня за мнение, которого не было в книге, поэтому я поместил его в свою книгу, чтобы я мог процитировать себя. Я должен закончить эту другую книгу (ы), чтобы я мог цитировать меня больше ;) - person Dave Newton; 08.10.2013
comment
@RomanC Нет, вопрос в том, как вызвать конкретный метод действия, которому не нужно использовать синтаксис вызова метода, потому что это геттер. - person Dave Newton; 11.06.2014
comment
@DaveNewton Вам лучше прочитать вопрос Как вызвать метод действия, тогда Этот метод quote() не вызывается. Вы понимаете, какой метод он должен вызывать? Если он использует имя свойства для вызова геттера для какого-либо компонента в стеке, он не вызывает метод в OGNL. OGNL имеет синтаксис для вызова методов объектов method(). - person Roman C; 11.06.2014