2

actionListener と、値を文字列として渡すか (非表示の) フォーム フィールドを作成する代わりに、オブジェクト全体をパラメーターとして渡す可能性が大好きです。私は JSF 2.1 (Mojarra) と RichFaces (popupPanel 用) を使用しています。

現在、次の問題に悩まされています。

ポップアップを開くボタンのあるテーブルを作成します。そのポップアップで、ユーザーはテーブル内の現在のユーザー/オブジェクトのデータを編集できます。

ポップアップのボタンをクリックして編集を保存するとき、ポップアップから値を送信し、どの userObject を編集したかを Bean アクションに伝えるにはどうすればよいですか?

現在、私の回避策は、ポップアップで非表示の inputText フィールドを使用することですが、この方法は好きではありません。代替手段はありますか?

これは私が達成しようとしていることです(最小化):

<h:datatable value="#{bean.users}" var="user">
  <h:column>
    Username #{user.name}
  </h:column>
  <h:column>
    <input onclick="showPopup()"/>
  </h:column>
</h:datatable>

<rich:popupPanel>
  <h:inputText value="#{bean.text}" />
  <h:commandButton value="Action" actionListener="#{bean.doSomething}">
    <f:attribute name="selected" value="#{userObjectFromDatatable}" />  <-- HOW? -->
  </h:commandButton>
</rich:popupPanel>
4

1 に答える 1

1

userObjectのように、選択した を会話のようなスコープで保持するのは非常に簡単に見えます@ViewScoped。の詳細については、この記事を参照してください@ViewScope。例として、目的の型の変数をバッキング Bean のインスタンス変数として宣言します。

  UserObject userObject;
  //getters and setters

テーブルには、次のようなものがあり、選択したオブジェクトをバッキング Bean に設定します。

   <h:commandButton value="Action" actionListener="#{bean.doSomething}">
    <f:setPropertyActionListener value="#{user}" target="#{bean.userObject}"/> 
   </h:commandButton>

テーブル内からバッキング Bean の変数を設定することにより、ビュースコープは、同じ JSF ビューにとどまり、そこから移動しない限り、そのオブジェクトに対して実行する他のすべての操作が同じインスタンスで行われることを保証します。

于 2012-12-08T19:07:06.020 に答える