こんにちは私は検索アクティビティを担当するViewスコープのBeanを持っています。ユーザーが検索条件と検索値を入力した後、検索ボタンを押すと、リストタイプのプロパティの1つに検索結果が入力され、別のページに移動します。このページでは、含まれようとしているリストにバインドされているデータテーブルに検索結果が表示されます。検索結果。ただし、ユーザーが検索して新しいページをリロードして検索結果を表示するたびに、新しいViewスコープのBeanが初期化されます。したがって、期待される検索結果を含むデータテーブルを表示することはできません。私はそれに関するいくつかの質問と記事を読みました、そしてそれはビュースコープのBeanが新しいページへのリクエストごとに初期化されるためとして知られています。この問題を解決する方法。そのリストに検索結果が必要なため、その結果リストテーブルをbeans(view scoped)Listプロパティにバインドしました。
質問する
1580 次
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>
基本的にこの@RequestScoped
Beanの場合:
private String query;
private List<Result> results;
public void search() {
results = service.search(query);
}
フォームが送信されると、URLに検索クエリ文字列が含まれるようになり、べき等/ブックマーク可能になります。リクエストを更新すると、まったく同じ結果になります。
于 2013-01-31T11:22:47.377 に答える