2010-07-19 48 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> 
相關問題