在Java EE 6之前的标准EL中,您不能直接调用方法,例如
#{bean.method()}
,也不能像#{bean.method(arg1, arg2)
一样带参数调用方法。
如果升级到符合EL 2.2 / Java EE 6的容器(Tomcat 7、Glassfish 3、JBoss AS 6等)不是一个选择,并且您当前正在使用EL 2.1 / Java EE 5(Tomcat 6、Glassfish 2、JBoss AS 4等),那么最好的办法是安装JBoss EL。 JBoss EL是一个符合EL 2.1的实现,支持与EL 2.2相同的功能。 安装JBoss EL只需将jboss-el.jar
放入/ WEB-INF / lib
中,并添加以下内容到web.xml
,假设您正在使用Mojarra:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
或者,当您使用MyFaces时:
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
对于你的特定情况,可考虑使用JSTL的fn:length
作为替代方案:
<h:outputText value="#{fn:length(bean.list)}" />
另一种选择是向bean添加一个getter,它返回List#size()
或在某些特定情况下使用自定义EL函数。
请注意,使用EL调用带参数的方法不是JSF 2.0特有功能,而是EL 2.2特定功能。EL 2.2是Java EE 6的一部分,JSF 2.0也是其中的一部分。因此,它看起来像是JSF 2.0特有功能,但实际上并不是。JSF 2.0向后兼容Servlet 2.5 / EL 2.1,缺少此功能。另一方面,JSF 1.x向前兼容Servlet 3.0 / EL 2.2,因此在JSF 1.x中也可以使用此功能,同时在Servlet 2.5 / EL 2.1上使用JBoss EL。