tim*_*nYE 8 navigation jsf redirect jsf-2
JSF中的Bean重定向可以通过以下方式完成
externalContext.redirect("foo.xhtml");
但我想使用规则,在<navigation-rule/>(faces-config.xml)中为<from-outcome/>&&传递命令行参数设置.
externalContext.redirect("from-outcome?param=bar");
不管用.怎么做?
Bal*_*usC 14
在ExternalContext#redirect() 接受一个URL,而不是一个导航的结果.
您需要从声明返回的操作方法返回导航结果String.
public String submit() {
    // ...
    return "from-outcome";
}
您可以配置导航案例以通过添加发送重定向<redirect>.
<navigation-rule>
    <navigation-case>
        <from-outcome>from-outcome</from-outcome>
        <to-view-id>/foo.xhtml</to-view-id>
        <redirect>
            <view-param>
                <name>param</name>
                <value>bar</value>
            </view-param>
        </redirect>
    </navigation-case>
</navigation-rule>
请注意,您也可以使用JSF隐式导航而无需此XML混乱:
public String submit() {
    // ...
    return "/foo.xhtml?faces-redirect=true¶m=bar";
}
如果你在一个无法返回字符串结果的事件或ajax监听器方法中,那么你总是可以抓住它NavigationHandler#handleNavigation()来执行所需的导航.
public void someEventListener(SomeEvent event) { // AjaxBehaviorEvent or ComponentSystemEvent or even just argumentless.
    // ...
    FacesContext context = FacesContext.getCurrentInstance();
    NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
    navigationHandler.handleNavigation(context, null, "from-outcome");
}
非导航案件的等价物正在使用ExternalContext#redirect().
| 归档时间: | 
 | 
| 查看次数: | 20180 次 | 
| 最近记录: |