Java 如何在JSF表达式语言中获得列表的长度?
如何使用JSF EL表达式获取Java 如何在JSF表达式语言中获得列表的长度?,java,jsp,jsf,jstl,el,Java,Jsp,Jsf,Jstl,El,如何使用JSF EL表达式获取ArrayList的长度 #{MyBean.somelist.length} 不起作用。是的,因为Java API创建委员会中的一些天才决定,即使某些类具有size()成员或length属性,它们也不会实现JSF和大多数其他标准所要求的getSize()或getLength(),您也不能做您想做的事情 有几种方法可以做到这一点 第一:向Bean中添加一个返回长度的函数: In class MyBean: public int getSomelistLength()
ArrayList
的长度
#{MyBean.somelist.length}
不起作用。是的,因为Java API创建委员会中的一些天才决定,即使某些类具有
size()
成员或length
属性,它们也不会实现JSF和大多数其他标准所要求的getSize()
或getLength()
,您也不能做您想做的事情
有几种方法可以做到这一点
第一:向Bean中添加一个返回长度的函数:
In class MyBean:
public int getSomelistLength() { return this.somelist.length; }
In your JSF page:
#{MyBean.somelistLength}
在MyBean类中:
public int getSomelistLength(){返回this.somelist.length;}
在JSF页面中:
#{MyBean.somelistLength}
第二:如果您使用的是Facelets(哦,天哪,为什么不使用Facelets!),那么您可以添加fn名称空间并使用length函数
In JSF page:
#{ fn:length(MyBean.somelist) }
在JSF页面中:
#{fn:length(MyBean.somelist)}
你是说尺码,是吗
#{MyBean.somelist.size()}
适用于我(使用具有JBoss EL扩展的JBoss Seam)您最终可以通过使用扩展EL语言,这将允许您调用任何Java Bean方法,即使带有参数…注意:此解决方案更适合于旧版本的JSTL。对于大于1.1的版本,我建议使用建议的
fn:length(MyBean.somelist)
有一些更详细的信息,包括另一种可能的解决方案 问题是我们试图调用列表的size方法(这是一个有效的LinkedList方法),但它不是一个符合JavaBeans的getter方法,因此无法计算表达式list.size-1 有两种方法可以解决这一困境。首先,您可以使用RT Core库,如下所示: 还没有人提到的第三个选项是将列表大小作为一个单独的属性放入模型中(假设您使用的是MVC)。所以在你的模型中,你会有“someList”和“someListSize”。这可能是解决此问题的最简单方法。
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<h:outputText value="Table Size = #{fn:length(SystemBean.list)}"/>
在屏幕上显示表格大小
示例:
Table Size=5
您可以使用以下EL获取长度:
{Bean.list.size()}七年后。。。作为jsf用户,facelets解决方案对我来说仍然很好 将名称空间包括为
xmlns:fn=”http://java.sun.com/jsp/jstl/functions“
并将EL用作
#{fn:length(myBean.someList)}
例如,如果在jsf ui中使用,下面的示例中的片段可以正常工作
<ui:fragment rendered="#{fn:length(myBean.someList) gt 0}">
<!-- Do something here-->
</ui:fragment>
EL的较新规格是否支持尺寸法?有人能证实或否认这一点吗?@nemo-这在JSR245维护版本中得到了解决:(就JEE规格而言,这将是JEE6)@McDowell,谢谢你提供的信息,我真的很惊讶他们花了这么长时间才解决问题。谢谢。这对我也有用+1.但是,在JEE 6得到广泛支持之前,我可能会坚持使用“更标准”的JSTL函数。顺便说一句,在JBoss中,它可能只需要说{MyBean.somelist.size}
(末尾没有括号)。fn可能是一种方法,不幸的是,它只在大于1.1的JSTL版本中可用。使用fn:length对我来说对裸JSP有效(没有JSF,Facelets;超遗留项目在被淘汰之前会被轻松更新)。要使用的正确标记库:
对于像我这样在这里登陆的人,两年后,考虑到您可以在facelet中添加以下名称空间:xmlns:fn=”http://java.sun.com/jsp/jstl/functions“
Related:@GBa您可以使用#{MyBean.somelist.size()}为了显示列表的大小,还可以使用c:forEach在列表上循环,并在循环体中将计数值指定给变量,如:。特别是当你在列表上循环的时候。也是的,我发现这是最简单的方法。我将websphere6与JSP(遗留系统)一起使用。使用相同的tablib,然后使用“美元符号”而不是“哈希”,因为哈希不起作用。ie:{fn:length(SystemBean.list)}这与.as@ArtjomB的答案基本相同。Suggests,在这里发布与其他人已经发布的答案相同的内容通常是不好的。在这种情况下,差不多六年前。
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<h:outputText value="Table Size = #{fn:length(SystemBean.list)}"/>
<ui:fragment rendered="#{fn:length(myBean.someList) gt 0}">
<!-- Do something here-->
</ui:fragment>