ConfigurableNavigationHandler参数问题

时间:2013-01-07 17:53:51

标签: jsf-2

尝试从页面A导航到页面B.导航到页面B时使用configurableNavigationHandler传递参数,如下所示

public void navigate(String outcome) {
    FacesContext fc = FacesContext.getCurrentInstance();
    ConfigurableNavigationHandler nav = (ConfigurableNavigationHandler) fc
            .getApplication().getNavigationHandler();
    nav.performNavigation(outcome+"?faces-redirect=true&includeViewParams=true&oldPage=hello");
}

在页面B中,当我单击后面时,它必须检索参数值并将用户导航到相应的页面。但是在检索请求参数时获取空值。

public String navigateToOldPage() {
    FacesContext fc = FacesContext.getCurrentInstance();
    String oldPage = fc.getExternalContext().getRequestParameterMap().get("oldPage");
    return oldPage;     
}

有人可以建议我吗?

1 个答案:

答案 0 :(得分:0)

您基本上是在尝试访问错误的HTTP请求中的oldPage参数,即在页面B中提交表单而不是显示页面B本身的表单。

基本上有两种选择:

  1. 在使用<f:viewParam>显示页面B期间将请求参数设置为bean属性:

    <f:metadata>
        <f:viewParam name="oldPage" value="#{bean.oldPage}" />
    </f:viewParam>
    

    with(@ViewScoped bean)

    public String navigateToOldPage() {
        return oldPage;
    }
    

  2. 使用UICommand保留负责表单提交的<f:param>组件中的请求参数:

    <h:commandButton ... action="#{bean.navigateToOldPage}">
        <f:param name="oldPage" value="#{param.oldPage}" />
    </h:commandButton>
    

    或者,如果它只是一个真正的GET请求,那么使用<h:button>(或<h:link>

    <h:button ... outcome="#{param.oldPage}" />