2011-08-07 51 views
4

我在我的JSF頁面上有一個inputText,並且附加了JavaScript日曆彈出窗口。 有條件地我將inputText禁用屬性設置爲true和false。當禁用爲true時,InputText值爲空

當我設置disabled = true並且當我將JSF值寫入數據庫時​​,inputText中的值爲null。我相信這是由於disabled = true

即使disabled = true有什麼辦法保留inputText框中的值嗎?

我正在使用JSF 1.1。

回答

3

另一種解決方法是將提交表單時,臨時啓用此輸入,並且模型更新後,再次禁用它。還有一些使用隱藏輸入的解決方案,但不幸的是我不記得它是如何工作的。

2

你應該只讀=真正的,而不是試圖禁用= TRUE(就像在普通的HTML)

+0

如果我使readonly爲true,那麼從日曆彈出窗口中,用戶可以在inputText字段中選擇一個日期值。 – user75ponic

+0

也許你應該澄清你想禁用什麼,什麼不應該禁用... – Tristan

+0

基於一個條件,我想禁用inputText。 InputText附帶一個彈出日曆,供用戶選擇日期。如果我只讀取inputText,則用戶可以從彈出日曆中選擇日期。理想情況下,我希望用戶不要在inputText中進行任何更改。就像你提到的禁用會使jsf頁面中的值爲null。 – user75ponic

2

瀏覽器是繼HTML 4.0.1 spec

一個成功的控制是提交 「有效」。

...省略的文字...

禁用窗體控件不作爲窗體的一部分提交。

作爲附加安全措施,如果JSF組件renderer發現isDisabled() == true,則不應處理Apply Request Values階段中的值。

HTML render kit doc

如果渲染器選擇實現解碼行爲,它必須諮詢「已禁用」和「只讀」組件的屬性被渲染,如果任一屬性的值等於要忽略大小寫字符串「真」(不帶引號),解碼方法必須不採取任何行動並立即返回。

由於應用請求值階段運行第一,這些布爾值的評估不能由任何在您的表單提交影響(除非你綁定他們#{param.foo}表達 - 提防任何安全方面的考慮)。

您的表單設計和提交策略必須考慮到這些限制。

1

當您設置爲disabled = truereadonly = true時,JSF機制不會發送(或處理)這些值。這就是爲什麼你在數據庫中寫入空值的原因。

作爲一種解決方案,您必須將值存儲在變量中,並使用屬性disabled = true將其顯示在inputText中。