JSF 2:ajax 调用后页面重定向

rup*_*hus 1 navigation ajax jsf-2

我陷入了与此类似的导航案例问题。简而言之,我正在尝试使用 ajax 渲染将导航从一个页面重定向到另一个页面h:commandLink。这是支持 bean

@ManagedBean
public class StartBean {

    public void search(){
        FacesContext
            .getCurrentInstance()
            .getExternalContext()
            .getFlash()
            .put("result", "hooray!")
        ;
    }

    public String showResult(){
        return "result?faces-redirect=true";
    }
}
Run Code Online (Sandbox Code Playgroud)

和起始页

<h:body>
    <h:form prependId="false">
        <h:commandButton value="Click" action="#{startBean.search}">
            <f:ajax execute="@this" render="@form"/>
        </h:commandButton>
    
        <br/>
         
        <h:commandLink 
            action="#{startBean.showResult()}" 
            rendered="#{flash.result != null}" 
            value="#{flash.result}"
        />
    
    </h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)

result页面只是显示一条消息。这两个页面都位于 Web 模块上下文根上。恰好h:commandLinkajax提交后显示正确,但是点击却导致页面刷新。它不会result像预期的那样重定向到该页面。之后,如果重新加载页面(F5),result则会显示页面。这似乎是渲染周期的问题。

有什么建议吗?

提前致谢。

Bal*_*usC 5

提交表单时,将重新评估rendered所有输入和命令组件的属性。因此,如果它计算,那么 JSF 就不会调用该操作。当方法的请求/响应完成时,Flash 作用域终止。当您发送. 我建议将 bean 放入视图范围中,并将属性绑定到其属性。falsesearch()showResult()rendered

@ManagedBean
@ViewScoped
public class StartBean {

    private String result;

    public void search(){
        result = "hooray";
    }

    public String showResult(){
        return "result?faces-redirect=true";
    }

    public String getResult() {
        return result;
    }

}
Run Code Online (Sandbox Code Playgroud)

<h:commandLink 
    action="#{startBean.showResult}" 
    rendered="#{startBean.result != null}" 
    value="#{startBean.result}"
/>
Run Code Online (Sandbox Code Playgroud)

也可以看看: