如何在JSF EL中显示List#size()的值?

the*_*cuz 21 jsf binding el jsf-2

我想知道是否有办法将方法的返回值绑定到JSF组件中.我会更好地解释自己.假设我有这样一个类:

public class Document {
   private List<Attachment> attachments;
   //getter and setter here
}
Run Code Online (Sandbox Code Playgroud)

这个类通过一个名为currentDocument的属性中的注册托管bean暴露给jsf,并以这种方式用于jsf

<h:outputText value="#{myManagedBean.currentDocument.attachment.size}" />
Run Code Online (Sandbox Code Playgroud)

我知道,这是不正确的.但是这样做的正确方法是什么?我应该在Document类上创建一个属性,让我们说numberOfAttachments,并绑定到那个,或者有一种方法直接绑定方法的返回值?

Bal*_*usC 27

如果您正在运行支持EL 2.2的容器(Tomcat 7,Glassfish 3,JBoss AS 6或更新版本,全部实现Servlet 3.0),或者正在使用JBoss EL,那么您应该能够通过EL调用非getter方法:

<h:outputText value="#{myManagedBean.currentDocument.attachment.size()}" />
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用JSTL fn:length():

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

如果由于某种原因你不能做到这一点,那么你最好的办法是自己创建一个EL功能

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

或添加一个额外的getter方法#{myManagedBean},返回该方法.

<h:outputText value="#{myManagedBean.currentDocumentAttachmentSize}" />
Run Code Online (Sandbox Code Playgroud)

也可以看看: