如何在 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() 的值?的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse 中显示 JSF EL 调用层次结构

如何在 JSF 数据表中显示行索引

如何调试 JSF/EL

如何阻止 EL 表达式在未呈现的 JSF 组件中进行评估?

EL 空运算符如何在 JSF 中工作?

如果 jsf 数据表为空,如何显示消息?