11

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

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

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

selectFlight将返回一个字符串,例如selected-flight-review将用户定向到selected-flight-review.xhtml

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

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

这行得通,我已经对其进行了测试,并返回了正确的结果(在返回之前通过记录它进行了测试)

但是,不会发生重定向。ajax 调用还没有做到这一点。如何让它重定向到另一个屏幕?我不必发送任何变量,我只需要显示新屏幕。我应该使用 ajax 以外的东西(我不想这样做),还是有什么方法可以让这项工作像现在这样工作?

4

2 回答 2

23

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

public void clickFlight(Item lowFareBundledSearchItem) throws IOException {
    // ...
    FacesContext.getCurrentInstance().getExternalContext().redirect("selected-flight-review.xhtml");
    FacesContext.getCurrentInstance().responseComplete();
}
于 2013-09-03T10:19:13.680 回答
-2

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

于 2016-06-05T16:44:09.967 回答