小编典典

从ajax侦听器方法内部发送重定向

ajax

这个问题是密切相关的这一个(已回答)。

在整个项目中,我使用JSF命令按钮在屏幕之间导航,其中action属性将指向返回字符串的函数。字符串是新屏幕的名称,例如

<h:commandButton value="Select" action="#{searchResultsBundledBean.selectFlight}">
</h:commandButton>

selectFlight将返回一个字符串,例如selected-flight-review,它将引导用户selected-flight- review.xhtml

出于移动目的,我不得不panelGrid使用ajax调用来使clickable,例如

<h:panelGrid>
    <f:ajax event="click" listener="#{searchResultsBundledBean.clickFlight(lowFareBundledSearchItem)}"/>
 </h:panelGrid

这有效,我已经测试过了,并且返回了正确的结果(在返回之前测试并记录了它)

但是,没有重定向发生。Ajax调用尚未完成。如何使其重定向到另一个屏幕?我不必发送任何变量,只需要显示新屏幕即可。我是否应该使用ajax之外的其他方式(我不希望这样做),或者是否有某种方法可以使它像现在这样工作?


阅读 220

收藏
2020-07-26

共1个答案

小编典典

您可以重定向支持bean的响应:

public void clickFlight(Item lowFareBundledSearchItem) throws IOException {
    // ...
    FacesContext.getCurrentInstance().getExternalContext().redirect("selected-flight-review.xhtml");
    FacesContext.getCurrentInstance().responseComplete();
}
2020-07-26