フォルダーのコンテンツを表示するJSFページを作成しました(実際は、ドロップボックスのアカウントコンテンツです)。
DataTableを使用して、ListArrayオブジェクトのコンテンツをレンダリングしています。
<h:dataTable style="text-align: left" width="600" var="dContent" value="#{backedBean.contents}">
<h:column>
<f:facet name="header">
<f:verbatim>NAME</f:verbatim>
</f:facet>
<h:commandButton value="#{dContent.fileName}" action="#{backedBean.updateContents(dContent)}"/>
</h:column>
<h:column>
<f:facet name="header">
<f:verbatim>SIZE</f:verbatim>
</f:facet>
<h:outputText value="#{dContent.size}"/>
</h:column>
</h:dataTable>
しかし、このページを実行すると、次のエラーが表示されます。
/browse.xhtml @ 34,110 action = "#{backedBean.updateContents(dContent)}"構文解析エラー:#{backedBean.updateContents(dContent)}
...
...
原因:org.Apache.el.parser.ParseException:行1、列28で ""( ""( ""に遭遇しました。
"}" ...
"。" ...
"[" ...
">" ...
"gt" ...
"<" ...
"lt" ...
"> =" ...
"ge" ...
...
...
おもしろいことに、Netbeansはメソッド名をオートコンプリートできるので、バックエンドBeanは大丈夫だと思います。この問題は、パラメーターを指定してメソッドを呼び出す場合にのみ発生します。
何か案は?
どうもありがとう
メソッド引数の受け渡しはEL 2.2で導入されました。したがって、これは、Tomcat 7、Glassfish 3、JBoss AS 6などのサーブレット3.0/EL 2.2対応のコンテナで実行している場合にのみ可能ですandきみの web.xml
は、Servlet 3.0仕様に従って宣言されています。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://Java.Sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd"
>
<!-- Config here -->
</web-app>
そうでない場合は、 this answer をチェックして、データテーブルの現在の行を取得することに関する代替案を探します。または this answer を渡すことをサポートするものでEL実装を置き換えることに関してメソッド引数を使用して、Servlet 2.5/EL 2.1コンテナでも使用できるようにします。
Jboss Seamはこの機能の取得にも役立ちます。
Seamは、標準の統一表現言語(EL)の拡張を提供するJBoss ELを使用します。 JBoss ELは、EL式の表現力とパワーを向上させる多くの機能強化を提供します。
例:
単一引用符を使用してリテラル文字列を渡します:<h:commandLink action="#{printer.println('Hello world!')}" value="Hello"/>
または動的値<h:commandButton action="#{hotelBooking.bookHotel(hotel)}" value="Book Hotel"/>
の場合
制限:
コンパイラがパラメータを含む式を拒否するため、JBoss ELは現在JSP 2.1で使用できません。したがって、JSF 1.2でこの拡張機能を使用するには、Faceletsを使用する必要があります。拡張機能はJSP 2.0で正常に機能します。
実際、JSF 1.0以降、これを行うための「ハック」方法がありました。 Mapを返すメソッドをバッキングBeanで作成するだけで、JSF ELを使用して、そのメソッドに任意のオブジェクトを渡すことができます。JSFは、キーをマップに渡すと考えているためです。
一方、バッキングBeanメソッドでは、実際にはまったくマップではない「偽者」マップインスタンスを返します。このインスタンスは、get()
メソッドが呼び出したいメソッドに委任します。 .xhtmlまたは.jspファイルでは、角括弧表記を使用して変数を渡すことができます。
HashMap
を拡張することは、詐欺師のマップを簡単に定義できるようにする1つの方法です。そのように匿名の内部クラスを使用するのに十分な簡潔さです。
これはハックですが、過去に私にとってはうまく機能しました。