Jsf 调用直接方法或EL中带有参数/变量/参数的方法

Jsf 调用直接方法或EL中带有参数/变量/参数的方法,jsf,methods,arguments,parameter-passing,el,Jsf,Methods,Arguments,Parameter Passing,El,在JSF2.0中,如何调用直接方法或EL中带有参数/变量/参数的方法 例如,以EL为单位获取列表大小: <h:outputText value="#{bean.list.size()}" /> 或使用参数调用操作方法: <h:commandButton value="edit" action="#{bean.edit(item)}" /> 这在我的环境中似乎不起作用。它似乎不喜欢括号 javax.el.ELException:错误解析:#{bean.list.

在JSF2.0中,如何调用直接方法或EL中带有参数/变量/参数的方法

例如,以EL为单位获取列表大小:

<h:outputText value="#{bean.list.size()}" />

或使用参数调用操作方法:

<h:commandButton value="edit" action="#{bean.edit(item)}" />

这在我的环境中似乎不起作用。它似乎不喜欢括号

javax.el.ELException:错误解析:#{bean.list.size()}
com.sun.el.parser.ParseException:遇到“(”

在之前的标准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是一个兼容EL 2.1的实现,支持与EL 2.2相同的功能。安装JBoss EL只需将

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>
另一种选择是向bean添加getter,该bean返回
List 35; size()
,或者在某些特定情况下返回一个getter



因此,请注意,在EL中调用带参数的方法不是JSF2.0特有的特性。它是一个EL2.2特有的特性。EL2.2是JavaEE6的一部分,JSF2.0也是JavaEE6的一部分。因此,它看起来像是JSF2.0特有的特性,但不是。JSF2.0与Servlet2.5/EL2.1向后兼容,后者缺少此特性。另一方面d、 JSF 1.x与Servlet 3.0/EL 2.2是向前兼容的,因此也可以在JSF 1.x中使用此功能,然后在Servlet 2.5/EL 2.1上使用JBoss EL。

BalusC的答案是正确的,但是,当您使用maven时,您应该排除EL api 1.0的可传递依赖项,如下所示:

<dependency>
    <groupId>org.jboss.seam</groupId>
    <artifactId>jboss-el</artifactId>
    <version>2.0.0.GA</version>
    <!-- exclude el-api 1.0 transitive dependency -->
    <exclusions>
        <exclusion>
            <groupId>javax.el</groupId>
            <artifactId>el-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

org.jboss.seam
jboss el
2.0.0.GA
javax.el
埃尔api

duplicate?是否用于ajax请求的
ui:repeate
的值方法?请参阅:
<h:outputText value="#{fn:length(bean.list)}" />
<dependency>
    <groupId>org.jboss.seam</groupId>
    <artifactId>jboss-el</artifactId>
    <version>2.0.0.GA</version>
    <!-- exclude el-api 1.0 transitive dependency -->
    <exclusions>
        <exclusion>
            <groupId>javax.el</groupId>
            <artifactId>el-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>