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

时间:2013-09-03 10:12:46

标签: ajax jsf redirect

这个问题与this一个问题密切相关(已经回答)。

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:19)

您可以重定向辅助bean的响应:

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

答案 1 :(得分:-2)

添加你的支持bean  返回“选定航班评论”; 你不需要添加(.xhtml) 或者,如果你想重定向  返回“selected-flight-review?Faces-redirect = true”;