2010-07-19 19 views
20

参数/变量/参数我在JSF 2.0如何调用与EL参数/变量/参数直接法或方法?直接调用或采用的方法与EL

例如,在EL获取列表大小:

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

或调用的操作方法与参数:

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

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

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

+0

复制? HTTP://计算器。com/questions/206161/ – 2010-07-19 19:26:18

回答

51

在标准的EL之前EL 2.2 from Java EE 6你不能直接调用等
#{bean.method()}方法也不调用与参数的方法等#{bean.method(arg1, arg2)

如果升级到EL 2.2/Java EE 6的兼容的容器(Tomcat的7,Glassfish的3,JBoss应用服务器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的问题,假设你使用钻嘴鱼科:

<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)}" /> 

另一种方法是一个吸气剂添加到返回List#size()豆或在某些特定情况下一个custom EL function


请注意,因此在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。

+0

是否使用带有ajax请求的'ui:repeate'的值方法?请参阅:http://stackoverflow.com/questions/12884049/does-not-uirepeat-work-when-ajax-request – CycDemo 2012-10-15 05:38:25

0

Arend非常好,除了关于为Mojarra输入上下文参数的部分:添加到web.xml实际上在JBoss 7上打破它。尝试使用JBoss EL而不输入任何东西到web.xml。

0

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> 
相关问题