たとえば、検索ページと結果ページを使用してみましょう。検索ページと結果ページを処理する ViewScoped Bean がある場合、次のようなものを使用して URL を介してパラメーターを渡すことができます。
search.xhtml
<p:commandButton value="Search" type="submit" action="#{searchBacker.search}" >
バッキングビーン
@ManagedBean(name="search")
@ViewScoped
public class searchBacker extends AbstractBacking {
private String firstName = null;
private String lastName = null;
private String results = null;
public String search() {
return "results?faces-redirect=true&includeViewParams=true";
}
public void getResults() {
MyDAO dao = new MyDAO();
results = dao.getResults(firstName, lastName);
}
//getters and setters
}
results.xhtml
<f:metadata>
<f:event type="preRenderView" listener="#{searchBacker.getResults}" />
<f:viewParam name="firstName" value="#{searchBacker.firstName}"/>
<f:viewParam name="lastName" value="#{searchBacker.lastName}"/>
</f:metadata>
ここで、2 つのマネージド Bean があるとします。1 つは検索ページ用で、もう 1 つは結果ページ用です。
クエリ文字列は 2 つの異なるマネージド Bean を使用して URL に組み込まれますか? それとも、両方のページに同じマネージド Bean を使用する場合にのみ機能しますか?
アップデート
<f:viewParam>
search.xhtml と results.xhtml のページに同じものがありますが、唯一の違いは、results.xhtml では search.xhtml とf:viewParam value
は異なる支援者を指していることです。これを行うと、URLを介してパラメーターが渡されません。f:viewParam value
results.xhtml で search.xhtml で使用しているのと同じバッカーを指すと、パラメーターは URL を介して正常に渡されますが、必要な結果バッカーに値が存在しません。results.xhtml ページに sが重複している場合f:viewParam
(1 つは検索バッカー、もう 1 つは結果バッカー)、すべて正常に動作します。f:viewParam
これを行う正しい方法は、両方のマネージド Bean で同じ を 2 つ持つことですか?
例:
results.xhtml - パラメータは URL を介して渡されますが、resultsBacker では使用できません
<f:metadata>
<f:viewParam name="firstName" value="#{searchBacker.firstName}"/>
<f:viewParam name="lastName" value="#{searchBacker.lastName}"/>
</f:metadata>
results.xhtml - URL を介して渡されるパラメーターはありません
<f:metadata>
<f:viewParam name="firstName" value="#{resultsBacker.firstName}"/>
<f:viewParam name="lastName" value="#{resultsBacker.lastName}"/>
</f:metadata>
results.xhtml - パラメータは URL を介して渡され、resultsBacker で利用できますが、扱いにくいようです。これはこれを行う正しい方法ですか、それともまだ何か不足していますか?
<f:metadata>
<f:viewParam name="firstName" value="#{searchBacker.firstName}"/>
<f:viewParam name="firstName" value="#{resultsBacker.firstName}"/>
<f:viewParam name="lastName" value="#{searchBacker.lastName}"/>
<f:viewParam name="lastName" value="#{resultsBacker.lastName}"/>
</f:metadata>