在JSF的托管bean中获取GET参数

时间:2010-04-01 15:25:24

标签: jsf get url-parameters

有人能告诉我如何捕获从JSF的托管bean中的URI传递的参数吗? 我有一个导航菜单,其中所有节点都链接到一些导航案例。我有两个类似的项目:收购产品和发行产品。它们具有相同的页面,但有一个不同的参数:productType。我尝试通过将其添加到“to-view-id”元素中的URL来设置它,如下所示:

<navigation-case>
    <from-outcome>acquiring|products</from-outcome>
    <to-view-id>/pages/products/list_products.jspx?productType=acquiring</to-view-id>
</navigation-case>

<navigation-case>
    <from-outcome>issuing|products</from-outcome>
    <to-view-id>/pages/products/list_products.jspx?productType=issuing</to-view-id>
</navigation-case>

但是我无法从我的托管bean中获得这个“productType”。我试图通过FacesContext这样得到它:

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("productType")

就像这样:

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    request.getParameter("productType");

我试着将它作为托管bean的参数包含在faces-config.xml中,然后通过普通的setter获取它:

 <managed-bean>
        <managed-bean-name>MbProducts</managed-bean-name>
        <managed-bean-class>my.package.product.MbProducts</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
     <managed-property>
         <property-name>productType</property-name>
         <value>#{param.productType}</value>
     </managed-property>
    </managed-bean>
...
public class MbProducts {
...
 public void setProductType(String productType) {
  this.productType = productType;
 }
...
}

但这些方式都没有对我有所帮助。所有这些都返回null。我怎样才能获得此产品类型?或者我怎么能以其他方式传递它?

1 个答案:

答案 0 :(得分:3)

默认情况下,导航规则会执行转发。即它重用初始请求。无论您尝试访问转发资源中的请求参数,它总是会尝试从初始和已处理的请求中获取它们。

要解决此问题,您需要触发重定向而不是转发。它会创建一个全新的请求(您还会在浏览器地址栏中看到这一点)。

在JSF中,添加

<redirect/>

导航案例应该这样做。

相关问题