Вызов метода Facelet, где требуется свойство - PullRequest
1 голос
/ 06 декабря 2011

Можно ли вызвать метод, в котором свойство ожидается в JSF 2.0 Facelet EL .Например:

<h:outputText value="#{pojo.methodName}" />

, где pojo - это экземпляр POJO, а methodName - это имя метода.Будет выдана ошибка, потому что JSF ожидает найти метод getMethodName.Прежде чем кто-то спросит, зачем это нужно, рассмотрим любое значение, которое мы хотим отобразить в тексте, который вычисляется, и у нас нет требуемого метода получения и исходного кода.

Обновление после BalusC Ответ:

Переименование невозможно, так как исходный код недоступен.methodName () не работает.Разница лишь в том, что в реальном коде это цепочка pojo.

<h:outputText value="#{pojo1.pojo2.methodName()}" />

Так как другие свойства работают для pojo2, я предполагаю, что его methodName не может быть вызван.Сервер говорит: «У класса нет свойства methodName»

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

Пустые грани-конфигурации

<faces-config xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
   version="2.0">
</faces-config>

PS среда JBoss 6 и JSF 2

1 Ответ

2 голосов
/ 06 декабря 2011

Добавить скобки:

<h:outputText value="#{pojo.methodName()}" />

(который работает только в EL 2.2, который является частью Java EE 6, поэтому он работает только в Tomcat 7, Glassfish 3 и т. Д., См.также Вызовите прямые методы или методы с аргументами / переменными / параметрами в EL )

Или просто переименуйте метод:

public String getMethodName() {
    // ...
}
...