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

21

我希望知道是否有一种方法可以将方法返回值绑定到JSF组件中。 让我更好地解释一下。 假设我有一个像这样的类:

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

通过在一个叫做currentDocument的注册管理Bean中公开该类,使其暴露给JSF,并且可以在JSF中以这种方式使用:

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

这不是正确的方法,我知道。但是正确的方法是什么? 我需要在Document类上创建一个属性,比如numberOfAttachments,并绑定到它上面,还是有一种直接绑定到方法返回值的方法?


你可以使用#{myManagedBean.currentDocument.attachments.size()}来显示列表的大小。 - Umair
1个回答

29

如果您正在运行一个EL 2.2能力的容器(Tomcat 7、Glassfish 3、JBoss AS 6或更高版本,都实现了Servlet 3.0),或者使用JBoss EL,则应该能够通过EL调用非Getter方法:

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

另一种选择是使用JSTLfn: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}中添加一个额外的getter方法,该方法返回确切的内容。

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

另请参阅:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接