2013-08-05 54 views
0

我有一個通常在默認情況下被禁用的控件的facelets頁面,即當頁面首先呈現給客戶端時。這是通過一個EL表達式確定:在呈現頁面JSF組件的值沒有正確地更新到提交時的模型

disabled="#{referenceValue != requestbean.dependentControlValue}" id="notWorking" 

之後,用戶可以設置requestbean.dependentControlValuereferenceValue和通過一些JavaScript爲從屬控制,部件「notWorking」被啓用。

但是,在提交表單後,notWorking的值不會更新,這是通過在setter中爲該值添加調試日誌消息來找到的。我可以看到,notWorking的值是在使用firefox檢查時在請求中設置的。

問題: 我在做什麼錯?

順便說一句:
我知道,根據HTML規範,禁用控件不能成功,這要歸功於StackOverflow的研究。

而且,我從this post知道,那disabledrendered表達式更新模型值之前考慮過,但是我覺得殘疾人表達應當在提交表單評估,以false

回答

2

我在做什麼錯?

使用JavaScript而不是JSF重新啓用輸入。

作爲JSF的對抗篡改/黑客入侵的HTTP請求內建保障的一部分,disabled屬性(如renderedreadonly屬性)處理表單提交期間重新評估。如果他們以這樣的方式評估該值不應該被處理(即,disabled/readonly=truerendered=false,那麼提交的值將不被應用,轉換,驗證並且模型將不被更新)

解決方案將使用JSF而不是JavaScript來重新啓用輸入,或者以這種方式重寫disabled屬性中的條件,以便disabled屬性在處理表單提交期間評估false

+0

感謝@BalusC,尤其是對於修改您的所以,使用jsf 2,我只是簡單地使用由依賴控件觸發的部分請求,並重新呈現'notWorking'組件,我怎樣才能用j實現你的解決方案sf1.2? – omilke