为了账号安全,请及时绑定邮箱和手机立即绑定

在EL中使用参数/变量/参数调用直接方法或方法

在EL中使用参数/变量/参数调用直接方法或方法

在EL中使用参数/变量/参数调用直接方法或方法如何在JSF2.0中使用EL中的参数/变量/参数调用直接方法或方法?例如,在EL中获取列表大小:<h:outputText value="#{bean.list.size()}" />或调用带有参数的动作方法:<h:commandButton value="edit" action="#{bean.edit(item)}" />这在我的环境中似乎行不通。它似乎不喜欢括号。异常:错误解析:#{bean.list.size()}parser.ParseException:偶遇“(”
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

在标准的EL之前EL 2.2来自Java EE 6不能直接调用以下方法
#{bean.method()}也不调用具有如下参数的方法#{bean.method(arg1, arg2).

如果升级到符合EL 2.2/JavaEE 6的容器(Tomcat 7、GlassFish 3、JBossAS 6等)不是一个选项,而且您目前正在使用EL 2.1/JavaEE 5(Tomcat 6、GlassFish 2、JBossAS 4等),那么最好的选择是安装杰博斯·埃尔..JBossEL是一个符合EL 2.1标准的实现,它支持与EL 2.2相同的特性。安装JBossEl需要将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中使用参数调用方法并不是JSF2.0特有的特性。这是EL 2.2的特性。EL 2.2是JavaEE 6的一部分,JSF2.0也是其中的一部分。所以它看起来像JSF2.0是一个特定于JSF2.0的特性,但事实并非如此。JSF2.0向后兼容Servlet2.5/El2.1,后者缺乏此特性。另一方面,JSF 1.x与Servlet3.0/El2.2向前兼容,因此也可以在JSF1.x中使用此特性,也可以在Servlet 2.5/El 2.1上使用JBossEL。


查看完整回答
反对 回复 2019-06-16
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

然而,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>


查看完整回答
反对 回复 2019-06-16
  • 2 回答
  • 0 关注
  • 689 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信