0

こんにちは私は検索アクティビティを担当するViewスコープのBeanを持っています。ユーザーが検索条件と検索値を入力した後、検索ボタンを押すと、リストタイプのプロパティの1つに検索結果が入力され、別のページに移動します。このページでは、含まれようとしているリストにバインドされているデータテーブルに検索結果が表示されます。検索結果。ただし、ユーザーが検索して新しいページをリロードして検索結果を表示するたびに、新しいViewスコープのBeanが初期化されます。したがって、期待される検索結果を含むデータテーブルを表示することはできません。私はそれに関するいくつかの質問と記事を読みました、そしてそれはビュースコープのBeanが新しいページへのリクエストごとに初期化されるためとして知られています。この問題を解決する方法。そのリストに検索結果が必要なため、その結果リストテーブルをbeans(view scoped)Listプロパティにバインドしました。

4

1 に答える 1

1

べき等/ブックマーク可能ではないPOSTによる検索を実行しています。Googleのように、POSTの代わりにGETを使用してください。これ<f:viewParam>には非常に役立ちます。キックオフの例は次のとおりです。

<f:metadata>
    <f:viewParam id="query" name="query" value="#{bean.query}" />
    <f:event type="preRenderView" listener="#{bean.search}" />
</f:metadata>
...
<form>
    <label for="query">Query</label>
    <input type="text" name="query" value="#{param.query}" />
    <input type="submit" value="Search" />
    <h:message for="query" />
</form>
...
<h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}">
     ...
</h:dataTable>

基本的にこの@RequestScopedBeanの場合:

private String query;
private List<Result> results;

public void search() {
    results = service.search(query);
}

フォームが送信されると、URLに検索クエリ文字列が含まれるようになり、べき等/ブックマーク可能になります。リクエストを更新すると、まったく同じ結果になります。

于 2013-01-31T11:22:47.377 に答える