???? 被Struts的html:checkBox標簽使用的小問題郁悶了兩天,今天終于找到了解決的辦法。如果大家也遇到同樣的問題,可以參考。
1)需求:
???? 當通過菜單進入頁面時,頁面中的checkbox處于被選中狀態,頁面提交后forward回本頁,對應的checkbox保持提交時的狀態,也就是說:如果提交時checkbox是選中狀態回來仍然是選中狀態;如果用戶在提交前將checkbox的勾去掉,回來時checkbox應該為為選中狀態。
2)問題:
???? 這個需求看起來很簡單,只需要
??? 1)在對應的form中將checkbox對應的屬性設為true就行了:
????????
private boolean syaken = true;??? 2)在對應的jsp中使用html:checkbox標簽就行了
? ? ??
<html:checkbox property="syaken"/>??? 但問題是checkbox標簽不會去set初始化值為true的checkbox屬性,不賦初值時Struts默認賦為false;
??? 從網上找資料有人說可以實現ActionFrom的reset()方法將對應的屬性值設為false,但reset方法是在form實例化以后被調用的,也就是說你初始化的值true將被重置為false,這和直接將屬性值設為false沒有任何區別,這樣做的結果是你從菜單進入頁面時checkbox是處于不被選中的狀態。
?? 他們之間存在著矛盾,問題的關鍵就是每次提交時,Struts并沒有去重新設置所有checkbox的屬性值,而是有選擇地(初始化值為false)地進行重新設置。
3)解決辦法:
???? 超級簡單,在checkbox后面添加一個和checkbox的屬性同名并且value為“false”的隱藏輸入框,強迫Struts去重新設置checkbox的屬性值:
?????
<html:checkbox property="syaken"/>
? ??? <input type="hidden" name="syaken" value="false">
???這個問題郁悶了我兩天,沒想到解決辦法這么簡單。
????
0