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

28

在JSF 2.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:遇到“(”


重复?https://dev59.com/93VC5IYBdhLWcg3wtzgQ - Matthew J Morrison
2个回答

55

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。

ui:repeatзҡ„valueж–№жі•еҸҜд»Ҙе’ҢAjaxиҜ·жұӮдёҖиө·дҪҝз”Ёеҗ—пјҹиҜ·еҸӮиҖғпјҡhttp://stackoverflow.com/questions/12884049/does-not-uirepeat-work-when-ajax-request - Zaw Than oo

1
巴鲁斯C的答案是正确的,但是当你使用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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接