2011-07-18 21 views
2

Java + Tapestry 5アプリケーションには、フォームとグリッドの2つのコンポーネントが含まれています。フォームフィールドは、グリッドに表示される結果をフィルタリングするために使用します。フォームは、それがマップされているオブジェクトAの値を設定する単なるテキストフィールドです。グリッドはオブジェクトAから作成されます。フォームコンポーネントからグリッドコンポーネントに適切なインスタンスを送信する必要があります。これを行う最善の方法は何ですか?私はそれを上のページにオブジェクトを設定することで普通の古いJavaの方法で行うことができますが、よりクリーンな方法が必要です。私は環境の注釈について考えていましたが、それほど重すぎないのですか?Tapestry 5 - 2つのコンポーネント間の通信

​​

答えて

3

タペストリーのパラメータは、双方向に働く:あなたは(@Persist付き)あなたのページクラスにデータを保存し、パラメータとしてフォームのコンポーネントに渡した場合は、フォームのコンポーネントでその値を変更することができ、その自動的にあなたのページに反映されます:セッターへの呼び出しは必要ありません。

あなたはこのようにレイアウトされたページやフォーム部品持っているのであれば:

public class MyPage { 

    @Component(parameters = "dataHolder=dataHolder") 
    private MyForm formComponent; 

    @Component(parameters = "dataHolder=dataHolder") 
    private MyGrid gridComponent; 

    @Persist 
    @Property 
    private MyDataHolder dataHolder; 

} 

public class MyFormComponent { 

    @Parameter 
    private MyDataHolder dataHolder; 

    @OnEvent(EventConstants.SUCCESS) 
    void formSubmitted() { 
     this.dataHolder = new DataHolder(...); 
    } 

} 

を...そして、適切な値は、常にページ内に存在するため、また、グリッド・コンポーネントになります。

Component Parameters page in the Tapestry docsも参照してください。特に、「パラメータは双方向です」を参照してください。

+1

フォームコンポーネントがdataHolderインスタンスを環境に送信し、グリッドコンポーネントが環境のインスタンスを使用する場合はどうなりますか?その解決策に問題はありますか? Tapestry User Guideはそれを示唆していますhttp://tapestry.apache.org/environmental-services.html –

+0

@Ondrej:それは実行可能ですが、通常のパラメータがうまく機能する場合に使用するのはむしろ奇妙に思えます。 – Henning

関連する問題