2011-07-08 15 views
0

リストをバッキングBeanに渡すice:commandButtonを実装する必要があります。私はポートレットのスコープではなく、タグのスコープにあります。f:属性はString以外のものをサポートしていますか?

私は、actionListenerからf:attributeを取得すると、キャストする必要があるオブジェクトを取得することがわかります。私はFマッピングすることができるかどうかを知りたい

:リストの実際のインスタンスが実際ArrayListMyClass直列化可能であるList<MyClass>、に属性。

のような何か:

MyTag.xhtml

<ice:commandButton actionListener="#{TagBean.doPrintItems}"> 
    <f:attribute name="collection" value="#{items}" /> 
</ice:commandButton> 
//[other things] 

MyPortlet.jspx

<my:printPopup items="#{BackingBean.itemsToPrint}" /> 

BackingBean.java

class BackingBean { 
    private List<MyClass> itemsToPrint; 

    //getter and setter of course 
} 

TagBean.java

class TagBean { 
    private List<MyClass> collection; 

    //getter and setter of course 
    public void doPrint(ActionEvent e) { 
     collection = (List<MyClass>) e.getComponent().getAttributes().get("collection"); 
    } 

これは実現可能ですか?ありがとう

+0

これはうまくいくはずです。あなたが直面している問題は何ですか?それは疑問からは分かりません。 – BalusC

+0

問題はまだありません。私はこれに入る前に実行する他のタスクがあります。 **もし私がボタンで打たれたら、この方法は実行可能ではないことが分かっていると、間違いなく私には大きなロールバックがあります。私は次の月曜日のボタンの事に来ることを期待する –

答えて

0

<f:attribute>はカスタムコンポーネント属性を追加する可能性があります。それらはサーバー側のコンポーネントツリー状態に格納されます。したがって、これは任意のJavaオブジェクト型にすることができます。方法UIComponent#getAttributes()は、それほど多くないかそれ以上のことを示唆している。 Map<String, String>ではなく、Map<String, Object>を返します。あなたの疑問は、HTTPリクエストパラメータは文字列にしかなり得ないという事実に基づいていると私は信じています。しかし、コンポーネントの属性をHTTPリクエストパラメータと混同しないでください。

+0

問題の完全な説明。属性**はサーバー側に保存されています –

関連する問題