2

バックグラウンド:

  • という名前のフィールドを持つViewScopedBean がありますsomeId
  • と を含むページがsomePage.xhtmlありinputTextますcommandLink
  • inputText の値には、名前付きの Bean に対応するフィールドがあります。searchValue
  • リンクをクリックすると、Bean のメソッドがsearchResult.xhtml、同じ Bean を使用する別のページにリダイレクトされますsomePage(ただし、必須ではありません)。

Bean をレンダリングする前に、および変数searchResultの値に基づいて、データベース内で検索を実行する必要があります。その後、結果を に示します。inputTextsomeIdsearchResult

これなしでこれを行うことは可能ですか:

  • SessionScopedBeanを使用する、または
  • and letのh:link代わりにajax によって更新される getの値を表すcommandLinkf:paramsomeIdinputText

私も試してみましFlashたが、利用できないようですpreRenderView

4

1 に答える 1

2

ページから searchResult.xhtml に移動すると、ビュー スコープのマネージド Bean が再作成されます。ビュー スコープのマネージド Bean は、ナビゲーションが発生するまでまだ生きているため、問題は次のように解決されるはずです。

1- searchResult.xhtml ページをスコープとするビューで別のマネージド Bean を作成し、set および get メソッドを使用して変数 someId を定義します。

2-コマンドリンク(最初のBean)でアクションメソッドを定義して、フラッシュスコープにsomeIdの値を保存し、リダイレクトでsearchResult.xhtmlに移動します

public String navigatetosearch() {
    FacesContext.getCurrentInstance().getExternalContext().getFlash().put("someId", someId );
    return "/pages/searchResult?faces-redirect=true";
}

3-get メソッドの 2 番目の Bean で、フラッシュから変数を復元します。

public SomeId getSomeId() {
    if (SomeId == null) {
        SomeId =  getFlash().get("SomeId");
    }
    return SomeId;
}

その後、この変数を PreRenderView または任意の場所のメソッドで使用できます。

于 2013-05-29T16:29:37.100 に答える