我想知道是否有办法将方法的返回值绑定到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中调用直接方法或带有参数/变量/参数的方法