JSF值綁定是單向還是雙向的?當我清除我的支持bean時,視圖保留舊值
當我清除我的支持bean數據時,view仍然保留較舊的值。 JSF的工作方式是這樣嗎? 我想知道一種方法來同步視圖與後臺bean。
JSF值綁定是單向還是雙向的?當我清除我的支持bean時,視圖保留舊值
當我清除我的支持bean數據時,view仍然保留較舊的值。 JSF的工作方式是這樣嗎? 我想知道一種方法來同步視圖與後臺bean。
不完全確定你在問什麼,但是,如果你的bean不是請求範圍,他們會用你以前的值填充你的html表單控件。
如果你的豆視圖範圍或session範圍,您仍可以通過在bean的行動貪利操縱模型值(commandLink/commanButton動作)
,如果您想要的值被清除的控制渲染值稍後訪問同一頁面時,應該讓你的頁面bean請求範圍。
如果您願意,可以通過使用綁定而不是值來直接對UIComponents進行微操作以完全控制,從而允許您直接在bean中創建和管理UIComponents。
<h:inputText binding="#{bean.inputComponent" />
並在代碼
public class myBean {
private UIInput inputComponent;
public UIComponent getInputComponent() {
// create your UIComponent here, and manage values in your command methods
}
public void setInputComponent(UIComponent component) {
inputComponent = component;
}
}
JSF做你告訴它做什麼。
爲了刷新視圖(在對bean進行了一些更改之後),您需要執行回發到原始視圖,通過返回操作方法的null/void或指定客戶端ID(或其他可接受的值,例如@form)將被執行(更新)和稍後呈現(刷新)的屬性<f:ajax>
標記附加到您的組件,該組件應該對您的bean進行更改。
是的,數據綁定是雙向的。但是,這意味着小,沒有回答兩個關鍵問題:
而答案是:
這意味着,與第一個直覺相反: - 輸入等組件會保持它們的狀態,並且它與後備bean分離。它可以保留很長時間,甚至很多回發,而無需與後臺bean同步(例如,當表單上的任何其他組件無法驗證時)。
想象生命週期的最簡單的方法是:
的外賣店:
如果您嘗試使用JSF和穀物一起使用,那真是令人愉快。如果試圖反對谷歌並將JSF屈服於您關於Web框架應該如何工作的想法(比如在驗證器中使用業務驗證,在轉換器中更改模型,從構造函數中讀取數據庫等),您需要很多BalusC的幫助:-)
請注意,如果屬性處於提交表單中,綁定將僅爲雙向**,否則JSF將僅使用getter。 – 2013-03-04 04:22:33
@LuiggiMendoza:不要忘記,服務器*需要插入!電力對於JavaServer Faces工作至關重要。 – fdreger 2013-03-09 21:27:05
即使您爲您的電子設備充電,登錄到SO並添加此類評論,電力也至關重要! – 2013-03-09 21:57:44
這並不完全正確。請求範圍的bean將被重新創建,並在下一次請求時被重新填充(通過客戶端值),儘管視圖範圍的bean不會被重新創建,但從視圖中恢復(不包括雞蛋)。但數據將保持不變。 – skuntsel 2013-03-03 08:30:00
ahh是的,我明白了你的觀點,我編輯了我的答案,使其更清晰 - 但是如果你希望通過在操作方法中返回相同的viewid來完全重置視圖,請參閱http://stackoverflow.com/questions/9458911/reset-jsf-backing-beanview-or-session-scope例如 – 2013-03-03 08:34:05
當然,因爲它不會是回發。但我理解OP的問題,他希望他在(聽衆)方法中產生的變化*在他看來反映出來。順便說一句,你知道UI組件的綁定屬性在查看作用域bean方面做了什麼嗎? – skuntsel 2013-03-03 08:40:18