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

Sky*_*ger 10 ajax jsf redirect

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

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

<h:commandButton value="Select" action="#{searchResultsBundledBean.selectFlight}">
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

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

出于移动目的,我必须panelGrid使用ajax调用进行可点击,例如

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

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

但是,不会发生重定向.ajax调用尚未执行此操作.如何将其重定向到另一个屏幕?我不需要通过任何变量发送,我只需要显示新的屏幕.我应该使用除ajax以外的东西(我不愿意),还是有某种方法可以按照现在的方式使用它?

Joh*_*dli 20

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

public void clickFlight(Item lowFareBundledSearchItem) throws IOException {
    // ...
    FacesContext.getCurrentInstance().getExternalContext().redirect("selected-flight-review.xhtml");
    FacesContext.getCurrentInstance().responseComplete();
}
Run Code Online (Sandbox Code Playgroud)