Jsf 在对话框关闭时重定向到新页面

Jsf 在对话框关闭时重定向到新页面,jsf,dialog,primefaces,Jsf,Dialog,Primefaces,我试图在primeface对话框关闭后重定向到新页面。我尝试在对话框中使用AJAXCLOSE事件,通过启动支持bean中的重定向 <p:ajax event="close" listener="#{bean.goToStartPage}" /> 关闭对话框后,是否有其他方法将重定向放置到新页面?您可以配置JSF对AJAX请求执行正确的重定向,但是如果您不希望以这种方式执行重定向,我将调用一个隐藏按钮,该按钮将触发对托管bean方法的完整页面回发 <p:ajax event

我试图在primeface对话框关闭后重定向到新页面。我尝试在对话框中使用AJAXCLOSE事件,通过启动支持bean中的重定向

<p:ajax event="close" listener="#{bean.goToStartPage}" />


关闭对话框后,是否有其他方法将重定向放置到新页面?

您可以配置JSF对AJAX请求执行正确的重定向,但是如果您不希望以这种方式执行重定向,我将调用一个隐藏按钮,该按钮将触发对托管bean方法的完整页面回发

<p:ajax event="close" oncomplete="hiddenBtnWidget.jq.click()" />

...

<p:commandButton id="hiddenBtn" widgetVar="hiddenBudgetWidget" ajax="false"
    actionListener="#{bean.goToStartPage}" style="display: none;" />

...
只要您的侦听器正在执行重定向,那么这将重定向页面。

另一个解决方案是重定向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);
}