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



我想知道是否有办法将方法的返回值绑定到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,并绑定到它,或者有一种方法可以直接绑定到方法的返回值?

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

<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}添加一个额外的getter方法,该方法返回该值。

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

参见:

  • 在EL中调用直接方法或带有参数/变量/参数的方法

相关内容

  • 没有找到相关文章

最新更新