这个问题是密切相关的这一个(已回答)。
在整个项目中,我使用JSF命令按钮在屏幕之间导航,其中action属性将指向返回字符串的函数。字符串是新屏幕的名称,例如
<h:commandButton value="Select" action="#{searchResultsBundledBean.selectFlight}"> </h:commandButton>
selectFlight将返回一个字符串,例如selected-flight-review,它将引导用户selected-flight- review.xhtml
selectFlight
selected-flight-review
selected-flight- review.xhtml
出于移动目的,我不得不panelGrid使用ajax调用来使clickable,例如
panelGrid
<h:panelGrid> <f:ajax event="click" listener="#{searchResultsBundledBean.clickFlight(lowFareBundledSearchItem)}"/> </h:panelGrid
这有效,我已经测试过了,并且返回了正确的结果(在返回之前测试并记录了它)
但是,没有重定向发生。Ajax调用尚未完成。如何使其重定向到另一个屏幕?我不必发送任何变量,只需要显示新屏幕即可。我是否应该使用ajax之外的其他方式(我不希望这样做),或者是否有某种方法可以使它像现在这样工作?
您可以重定向支持bean的响应:
public void clickFlight(Item lowFareBundledSearchItem) throws IOException { // ... FacesContext.getCurrentInstance().getExternalContext().redirect("selected-flight-review.xhtml"); FacesContext.getCurrentInstance().responseComplete(); }