如何在 JSF EL 中显示 List#size() 的值?
Posted
技术标签:
【中文标题】如何在 JSF EL 中显示 List#size() 的值?【英文标题】:How to display value of List#size() in JSF EL? 【发布时间】:2011-10-30 12:51:30 【问题描述】:我想知道是否有办法将方法的返回值绑定到 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() 来显示列表的大小。 【参考方案1】:如果您正在运行支持 EL 2.2 的容器(Tomcat 7、Glassfish 3、JBoss AS 6 或更新版本,都实现了 Servlet 3.0),或者正在使用 JBoss 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" />
另见:
Invoke direct methods or methods with arguments / variables / parameters in EL【讨论】:
以上是关于如何在 JSF EL 中显示 List#size() 的值?的主要内容,如果未能解决你的问题,请参考以下文章