2012-03-15 104 views
1

我有一個網頁提供產品信息的數據表從一個產品的選擇行爲我重定向到產品信息頁面傳遞一個參數:viewscoped Bean不保存會話參數

configurableNavigationHandler.performNavigation("productInfo?faces-redirect=true&prId=" + selectedCpl.getP().getPrId()); 

在我viewscoped豆在我init方法我得到的請求參數,並填寫所需的對象:

@ManagedBean 
@ViewScoped 
public class ProductInfo implements Serializable { 

private Product p; 
private Integer prId; 

@PostConstruct 
private void init() { 
    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    if (request.getParameter("prId") != null) { 
     prId = Integer.parseInt(request.getParameter("prId")); 
     p = pf.find(prId); 

在我productInfo.xhtml我有一個產品信息視圖和對話框編輯產品信息,但是當我按下提交我的請求參數爲null :

<p:commandButton styleClass="button-edit" value="Submit" actionListener="#{productInfo.saveProduct()}" update="prodInfo" oncomplete="dlg.hide();"/> 

我使用jsf 2.0與primefaces元素。

任何人都可以幫助我嗎?謝謝。

回答

1

這不是一個會話參數。這是一個請求參數。這是null是因爲你沒有發送它與提交請求一起。通過<f:param>發送。

<p:commandButton ...> 
    <f:param name="prId" value="#{productInfo.prId}" /> 
</p:commandButton> 

無關到具體的問題,還有其他一些潛在的問題。首先,當您提交表單時,視圖範圍的bean應該重新創建而不是。也許你在視圖中使用了標記處理程序。其次,你應該儘可能地避免從JSF封面下面拖拽原始的javax.servlet API。改爲使用ExternalContext#getRequestParameterMap()。第三,<f:viewParam>比後構建更清潔。第四,導航處理器的重定向在視圖中聞起來像設計問題,例如,爲什麼不使用一個GET鏈接?

有關所有這些問題的深入解釋,請參閱Communication in JSF 2.0

+0

Thank you..Yes就是這種情況,但即使對象被重新創建,也無法保存更改。我使用了另一種方法,在每次重定向到productinfo頁面之前,我使用了另一種方法,並在bean頁面上顯示了bean會話,並在列表頁面上銷燬了會話對象FacesContext.getCurrentInstance()。getExternalContext()。getSessionMap()。remove(「productInfo」); ...唯一的方法,使其工作...關於其他sugestions ...我不明白爲什麼我的viewscoped bean重建ajax請求...我需要postconstruct來填充像我用的10個對象視圖 – Questionmark 2012-03-15 13:48:30

+1

閱讀「無關」的說明。視圖範圍的bean不應該重新創建,你應該使用''。詳細的解釋/解決方案/示例已經在給定的鏈接後面提供。使用會話範圍不是解決方案,而是一種黑客/解決方法。 – BalusC 2012-03-15 13:53:59

+0

我閱讀了整篇文章,它幫助我改進了代碼的某些部分。我使用p:datatable和p:ajax請求選擇 - 重定向,這是我可以重定向的唯一方式。我不明白是在我做重定向後,我的productList viewscoped bean被重新構建了......並且它是有點慢。你是對的我首先使用標籤,我必須使用模板,所以我使用來包含xhtmls中的模板和內容部分中的。這是我第一個真正想讓它正確的JSF應用程序。非常感謝您的幫助。 – Questionmark 2012-03-16 09:28:37