GBa*_*GBa 116 java jsf jsp jstl el
如何获得ArrayList
使用JSF EL表达式的长度?
#{MyBean.somelist.length}
Run Code Online (Sandbox Code Playgroud)
不起作用.
bil*_*dev 165
是的,因为Java API创建委员会中的某些天才决定,即使某些类具有size()
成员或length
属性,它们也不会实现,getSize()
或者getLength()
JSF和大多数其他标准需要,但您无法做到您想要的.
有几种方法可以做到这一点.
一:向Bean添加一个返回长度的函数:
In class MyBean: public int getSomelistLength() { return this.somelist.length; } In your JSF page: #{MyBean.somelistLength}
二:如果你正在使用Facelets(哦,上帝,为什么你不使用Facelets!),你可以添加fn命名空间并使用长度函数
In JSF page: #{ fn:length(MyBean.somelist) }
Dam*_*amo 58
你的意思是尺寸()不是吗?
#{MyBean.somelist.size()}
Run Code Online (Sandbox Code Playgroud)
适合我(使用JBoss Seam,它有Jboss EL扩展)
Jam*_*hon 14
注意:此解决方案适用于旧版本的JSTL.对于大于1.1的版本,我推荐使用比尔詹姆斯的fn:length(MyBean.somelist)
建议.
本文有一些更详细的信息,包括另一种可能的解决方案;
问题是我们正在尝试调用列表的大小方法(这是一个有效的LinkedList方法),但它不是符合JavaBeans的getter方法,因此无法计算表达式list.size-1.
有两种方法可以解决这个难题.首先,您可以使用RT Core库,如下所示:
<c_rt:out value='<%= list[list.size()-1] %>'/>
Run Code Online (Sandbox Code Playgroud)
其次,如果要在JSP页面中避免使用Java代码,可以实现一个包含列表的简单包装类,并使用符合JavaBeans的getter方法提供对列表大小属性的访问.该bean列在代码清单2.25中.
c_rt方法的问题在于您需要手动从请求中获取变量,否则它无法识别它.此时,您将为应该在功能中构建的内容添加大量代码.这是EL中的GIANT缺陷.
我最终使用了"包装器"方法,这里是它的类;
public class CollectionWrapper {
Collection collection;
public CollectionWrapper(Collection collection) {
this.collection = collection;
}
public Collection getCollection() {
return collection;
}
public int getSize() {
return collection.size();
}
}
Run Code Online (Sandbox Code Playgroud)
还没有人提到的第三个选项是将列表大小放入模型中(假设您使用的是MVC)作为单独的属性.因此,在您的模型中,您将拥有"someList",然后是"someListSize".这可能是解决此问题的最简单方法.
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<h:outputText value="Table Size = #{fn:length(SystemBean.list)}"/>
Run Code Online (Sandbox Code Playgroud)
在屏幕上显示表格大小
例: Table Size = 5
归档时间: |
|
查看次数: |
123589 次 |
最近记录: |