这个问题与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之外的其他东西(我不愿意),还是有某种方法可以像现在这样使用它?
答案 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”;