Primefaceダイアログを閉じたら、新しいページにリダイレクトしようとしています。ダイアログ内でajaxcloseイベントを使用して、を介してバッキングBeanでリダイレクトを起動しようとしました。
<p:ajax event="close" listener="#{bean.goToStartPage}" />
ダイアログを閉じた後に新しいページにリダイレクトする他の方法はありますか?
Primefaceダイアログを閉じたら、新しいページにリダイレクトしようとしています。ダイアログ内でajaxcloseイベントを使用して、を介してバッキングBeanでリダイレクトを起動しようとしました。
<p:ajax event="close" listener="#{bean.goToStartPage}" />
ダイアログを閉じた後に新しいページにリダイレクトする他の方法はありますか?
ここで見つかった別の解決策は、BeanメソッドでExternalContextをリダイレクトすることです。これにより、Ajaxであるかどうかに関係なく、ページがリダイレクトされます。
FacesContext ctx = FacesContext.getCurrentInstance();
ExternalContext extContext = ctx.getExternalContext();
String url = extContext.encodeActionURL(ctx.getApplication().getViewHandler().getActionURL(ctx, "/start.xhtml"));
try {
extContext.redirect(url);
} catch (IOException ioe) {
throw new FacesException(ioe);
}
AJAXリクエストで適切なリダイレクトを実行するようにJSFを構成できますが、この方法でリダイレクトを実行したくない場合は、マネージドBeanメソッドへのフルページポストバックをトリガーする非表示のボタンを呼び出します。
<p:ajax event="close" oncomplete="hiddenBtnWidget.jq.click()" />
...
<p:commandButton id="hiddenBtn" widgetVar="hiddenBudgetWidget" ajax="false"
actionListener="#{bean.goToStartPage}" style="display: none;" />
リスナーがリダイレクトを実行している限り、これによりページがリダイレクトされます。