<h/p:button outcome>
は、Bean アクション メソッドを呼び出すためのものではなく、結果文字列を直接含めるためのものです。そこにあるELは、値式としてすぐに評価されます。したがって、その背後にあるメソッドは、<h/p:button>
.
特定のケースでは、基本的にナビゲーションで Bean アクション メソッドを呼び出す方法が 2 つあります。ナビゲーションが行われる前にそれを呼び出す必要があり、エンドユーザーが GET 要求を再度開いたりリロードしたりするたびにアクションが再度呼び出されることを意図していない場合は、それを POST-Redirect-GET 要求にします。faces-redirect=true
クエリ文字列構文で結果値に追加するだけです。
例えば
<p:commandButton action="#{bean.submit}" ... />
と
public String submit() {
// ...
return "nextpage?faces-redirect=true";
}
このようにして、ブラウザーは POST 後にターゲット ページにリダイレクトされるため、エンドユーザーはターゲット URL がアドレス バーに反映されているのを確認できます。
または、エンドユーザーが GET リクエストを再度開いたり再ロードしたりするたびにアクションを呼び出す必要がある場合は、preRenderView
代わりに、リクエスト/ビュー スコープのバッキング Bean の (ポスト) コンストラクターまたはリスナー メソッドでジョブを実行します。
例えば
<p:button outcome="nextpage" ... />
と
@ManagedBean
@RequestScoped
public class NextpageBacking {
public NextpageBacking() {
// In constructor.
}
@PostConstruct
public void onPostConstruct() {
// Or in postconstructor (will be invoked after construction AND injection).
}
public void onPreRenderView() {
// Or before rendering the view (will be invoked after all view params are set).
}
// ...
}
レンダリング前のビュー リスナー メソッドは、次のように定義する必要があります。nextpage
<f:event type="preRenderView" listener="#{nextpageBacking.onPreRenderView}" />
以下も参照してください。