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: "("が発生しました
EL 2.2より前の標準ELでは、Java EE 6 からのメソッドを直接呼び出すことはできません。#{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
_に追加することです。モハラ:
_<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)}" />
_
もう1つの方法は、List#size()
を返すゲッターをBeanに追加するか、特定のケースでは カスタム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を使用することもできます。
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>