2010-04-01 45 views
4

有人能告訴我如何捕獲JSF託管bean中從URI傳遞的參數嗎? 我有一個導航菜單鏈接到某些導航案例的所有節點。我有兩個類似的項目:收購產品和發行產品。它們具有相同的頁面,但有一個不同的參數:productType。我儘量只將它添加到URL中的「查看的-ID」元素像這樣設置:在JSF託管bean中獲取GET參數

<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"); 

,我試圖將它作爲faces-config.xml中的託管bean的參數,然後得到它通過普通的二傳手:

<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。我如何得到這個productType?或者我怎麼能通過其他方式?

回答

3

導航規則默認爲轉發。即它重複使用初始請求。無論您嘗試訪問轉發資源中的請求參數,它都會嘗試從初始和已處理的請求中獲取它們。

要解決此問題,您需要激發重定向而不是轉發。它會創建一個全新的請求(您也可以在瀏覽器地址欄中看到這一點)。

在JSF中,加入

<redirect/> 

導航的情況下應該做的。

+0

謝謝,BalusC!在我的情況下,我也必須將.jspx更改爲.jsf,與一樣,它向我展示了一個CompilationException :) – mykola