2012-02-21 5 views
3

私は、カテゴリのリストを持つbeanという名前の要素を持っており、ドロップダウンボックスからそのリストに追加したいと思います。selectOneMenuで表されるオブジェクトをJSFのBeanのコレクションに追加できますか?

私の要素を残して、すべて正常に動作するページの下部にサブミットがありますが、ドロップダウンのためのコンバータもありますが、これは動作していますが、オブジェクトを取得する方法はありません私のドロップダウンからCategoryの型を選択し、それを私のbeanのカテゴリリストに追加します。ここで

は私からこれを達成しようとしている私のJSFのセクションです:私は、これは動作しません知っている

<table> 
<tr> 
    <th class="textRight">Choose Category</th> 
    <td> 
     <h:selectOneMenu id="currentCategory"> 
      <f:selectItems value="#{serviceWeb.listCategories()}" /> 
     </h:selectOneMenu> 
    </td> 
    <td> 
     <h:commandButton id="addCategory" value="Add" 
         action="element.categories.add(#{currentCategory.value})" /> 
    </td> 
</tr> 
</table> 

、私はエラーを取得する:

action="element.categories.add(#{currentCategory.value})" Not a Valid Method Expression 

説明するため、このメニューアイテムのバッキングBeanはありません。コンポーネント自体から値を取得しようとしています。

だから私はこのようにすることはできないと思いますが、どうやってそれをしますか?

可能ですか?

答えて

2

ビューにコンポーネントをバインドします(<h:selectOneMenu>のインスタンスがHtmlSelectOneMenuに解決されます)。UIInput#getValue()をアクションメソッドの引数として使用し、無効なEL構文を修正します。

<h:selectOneMenu binding="#{currentCategory}"> 
    <f:selectItems value="#{serviceWeb.listCategories()}" /> 
</h:selectOneMenu> 
<h:commandButton value="Add" action="#{element.categories.add(currentCategory.value)}" /> 
+0

興味深いことに、element.categoriesはaddが呼び出される前に文字列として解決されています。ああ、私はなぜそれがセットなのかを知っています。私は要素クラスにaddメソッドを書く必要があります。 – Link19

+0

私のためだけに動作します。おそらく、あなたはバグのある第三者のELレゾルバを使用しています。 – BalusC

+0

セットであなたのために働く? addCategory()メソッドを要素に追加しました。これは、currentCategory.valueも文字列に解決されるため、別のエラーが発生します。 サードパーティELResolverはありません。 – Link19

関連する問題