2011-04-23 53 views
1

我有一個JSF應用程序和一個特定的頁面來顯示/編輯我的系統中的特定實體的細節(吸引力)。我有JSF頁面它接受attractionId作爲頁面參數如下:JSF 2.0從操作方法返回null不保留原始請求參數

<p:commandButton styleClass="button" 
        ajax="false" 
        value="Update Attraction" 
        action="#{attractionsBean.updateAttraction()}" /> 

在updateAttraction方法,通常爲:

<f:metadata> 
    <f:viewParam name="attractionId" value="#{attractionsBean.attractionId}" required="true" /> 
</f:metadata> 

提交更改到吸引我有這個命令按鈕當JSF返回null時,用戶被重定向到顯示任何可能已經創建的消息的同一頁面。但是,由於該頁面需要一個attractionId,因此它會給出一個驗證錯誤,因爲它不會自動添加原始請求參數,因此它是null。通常我這樣做如下:

if (FacesContext.getCurrentInstance().getMessageList().size() > 0) { 
    return null; 
} 

但是,這不會發回原始參數來顯示指定的吸引力。

任何人都可以建議一個乾淨的解決方案嗎?

謝謝!

回答

1

您可以將includeViewParams=true參數添加到讓jsf impl附加所有已聲明的視圖參數的結果,但我認爲這隻有在您還包含視圖標識的情況下才能起作用。你可以嘗試這樣的事:

return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?includeViewParams=true"; 

或者你可以定義一個常量,包括你的託管bean的觀點ID:

private static final String SUCCESS = "attraction?includeViewParams=true"; 

... 

if (FacesContext.getCurrentInstance().getMessageList().size() > 0) { 
    return SUCCESS; 
} 

這個PARAM一些更多的例子可以在這個blog post about POST-REDIRECT-GET and JSF 2.0找到。