Trong tiêu chuẩn EL trước EL 2.2 from Java EE 6 bạn không thể trực tiếp gọi các method như
#{bean.method()}
cũng không gọi các phương pháp với lập luận như #{bean.method(arg1, arg2)
.
Nếu nâng cấp lên một EL 2.2/Java EE 6 thùng chứa phù hợp (Tomcat 7, Glassfish 3, JBoss AS 6, vv) là không phải một tùy chọn và bạn hiện đang sử dụng EL 2.1/Java EE 5 (Tomcat 6, Glassfish 2, JBoss AS 4, v.v.), sau đó đặt cược tốt nhất của bạn là cài đặt JBoss EL. JBoss EL là một thực thi tương thích EL 2.1 hỗ trợ các tính năng tương tự như EL 2.2. Cài đặt JBoss EL là một vấn đề đặt jboss-el.jar
trong /WEB-INF/lib
và thêm dòng sau vào các web.xml
, giả định rằng bạn đang sử dụng cá móm:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
Hoặc, khi bạn đang sử dụng MyFaces:
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
Một thay thế cho trường hợp cụ thể của bạn là sử dụng JSTL của fn:length
:
<h:outputText value="#{fn:length(bean.list)}" />
Một giải pháp thay thế khác là thêm một bộ nạp vào hạt trả về List#size()
hoặc trong một số trường hợp cụ thể là custom EL function.
Xin lưu ý rằng việc gọi phương thức với đối số trong EL không phải là tính năng cụ thể của JSF 2.0. Đó là một tính năng cụ thể của EL 2.2. EL 2.2 là một phần của Java EE 6, mà JSF 2.0 cũng là một phần của. Vì vậy, nó trông giống như một tính năng cụ thể JSF 2.0, nhưng nó không phải là. JSF 2.0 tương thích ngược với Servlet 2.5/EL 2.1 thiếu tính năng này. Mặt khác, JSF 1.x tương thích với Servlet 3.0/EL 2.2, vì vậy nó cũng có thể sử dụng tính năng này trong JSF 1.x sau đó, cũng sử dụng JBoss EL trên Servlet 2.5/EL 2.1.
lặp lại? http: // stackoverflow.com/questions/206161/ –