Как отобразить значение List # size () в JSF EL? - PullRequest
21 голосов
/ 19 августа 2011

Я хотел бы знать, есть ли способ связать возвращаемое значение метода в компонент JSF.Я объясню лучше.Допустим, у меня есть такой класс:

public class Document {
   private List<Attachment> attachments;
   //getter and setter here
}

этот класс предоставляется jsf через зарегистрированный управляемый бин в свойстве currentDocument и используется в jsf следующим образом

<h:outputText value="#{myManagedBean.currentDocument.attachment.size}" />

Это не правильно, я знаю.Но как правильно это сделать?Я должен создать атрибут в классе Document, скажем, numberOfAttachments, и привязать к нему, или есть способ привязки непосредственно к возвращаемому значению метода?

1 Ответ

27 голосов
/ 19 августа 2011

Если вы работаете с контейнером, поддерживающим EL 2.2 (Tomcat 7, Glassfish 3, JBoss AS 6 или новее, все реализуют Servlet 3.0), или используете JBoss EL, то вы должны иметь возможность вызывать не-получающие методы EL:

<h:outputText value="#{myManagedBean.currentDocument.attachment.size()}" />

Альтернативой является использование JSTL fn:length():

<html xmlns:fn="http://java.sun.com/jsp/jstl/functions" ...>
...
<h:outputText value="#{fn:length(myManagedBean.currentDocument.attachment)}" />

Если по какой-либо причине для вас это невозможно, лучше всего самостоятельно создать функцию EL

<h:outputText value="#{my:size(myManagedBean.currentDocument.attachment)}" />

или добавить дополнительный метод получения к #{myManagedBean}, который возвращает именно это.

<h:outputText value="#{myManagedBean.currentDocumentAttachmentSize}" />

Смотри также:

...