0

これは、JSF 2.0 用の MyFaces CODI JSF-Module v1.0.1 にあります。

私は @ViewAccessScoped バッキング Bean を使用する JSF ページを持っています。このページは、次のように別のページから呼び出されます。

  <h:link outcome="/editLocation" target="_blank" 
       value="Edit Location: #{maintLocation.selected.id}"
       disabled="#{!maintLocation.rowSelected}">                               
          <f:param name="locationID" value="#{maintLocation.selected.id}" />
          <f:param name="closeOnUpdate" value="true" />
  </h:link>

ユーザー エクスペリエンスは、editLocationページが新しいウィンドウまたは新しいタブにポップアップ表示され、ユーザーがそれを編集し、closeOnUpdateパラメーターが true に設定されている場合、完了時にwindow.close()を呼び出すというものです。

それはすべてうまくいきます。ただし、ユーザーが別の場所を編集した場合、ViewAccessScoped Bean はまだそこにあるため、再インスタンス化されません。そのため、パラメータを確認することはなく、単に前のレコードの状態を思いつきます。

ブラウザーの URL ウィンドウでwindowidパラメーターを手動で消去すると、新しいバッキング Bean を取得できます。これをh:linkコンポーネントから削除する方法はありますか?

または、Bean が完了ボタンを押すと、Bean が含まれているスコープからそれ自体を削除する方法はありますか?

4

1 に答える 1

2

CODIWikiページで答えを見つけました。私は暗黙的にCODI会話を使用していませんが、@ViewAccessScoped実装はその上に階層化されているようです。だから私はできる:

import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;

...

@Inject private Conversation conversation;

...

conversation.close();  // when I have committed to close the window.
于 2012-04-08T20:27:24.790 に答える