Подтвердить что ты не робот

Как отобразить значение размера списка() в JSF EL?

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

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

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

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

Это неправильно, я знаю. Но каков правильный способ сделать это? Должен ли я создавать атрибут в классе Document, let sayOfAttachments и привязываться к нему, или есть способ напрямую связать его с возвращаемым значением метода?

4b9b3361

Ответ 1

Если вы используете контейнер с поддержкой 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)}" />

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

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

См. также: