背景:最近需要寫一個表單,就是最簡單的java web的CRUD,但是我卻在此花了兩天時間才搞定一個radio, 好吧我承認是自己的錯,所以我在此mark一下。
其中的一個bean類有80多個字段,其它七十多個字段是boolean,于是我想到了用radio, 寫好了一個radio,并且默認都是選中false,然后復制,粘貼,改名,花了近兩個小時的時間完成了,然后就是測試。
在瀏覽器中打開頁面,然后選兩組radio,由于我默認是選中的false,當我選成true的時候,竟然false選項還是選中,沒有消失,我懷疑是不是我復制的時候name沒有改過來,然后,我又在代碼里面認認真真的檢查,也可能是由于在密密麻麻的radio里面待的太久了,頭腦不清醒,七十多個字段,一兩百行,一個個的找,竟然沒有找出是寫錯了name,(事實證明是寫錯了name),
沒有找出錯誤,我想用js來解決這個問題,讓js來解決,js針對一個對象綁定事件我會,可是針對多個一樣對象遍歷綁定,我不會,于是到群里問,結果大家都說radio本來就是按組來的,還給我寫了例子給我看,于是我把密密麻麻的代碼發到群里,有哥們竟然找出來是name不一樣導致的,真坑,我又認認真真的找了一篇,前前后后花了近兩個小時時間,終于把這個問題解決了。已經一下午木有了,數據還沒有到后臺。
由于表單太大,我借用的struts2來封裝對象,由于字段太多,都加了默認值,就沒有手動去修改一些數據,直接提交,結果能保存到數據庫,也就沒有做其它過多的測試,以為已經可以正常來使用了。
第二天又是update,經過半個一個多小時的努力,可以通過ajax來查詢數據,并且動態生成表單了。
但是這個時候發現,無論我怎么選radio結果傳到后臺的都是false,我開始懷疑是不是我加了默認值為checked在false選項上面,于是今天再次想用js來手動更改radio的checked的值,tm,我竟然自己寫出來了(自己高興一下)
高興的結果,是沒有一點成果,發送到后臺的值依然是false,神啊....
這次我開始懷疑是struts2不能轉換radio的value值原因了,于是在網上找資料,證實我的想法,發現struts2傳的radio值是一個數組,寫了一個全局struts2的conversion。這次總算可以了。
技術總結:
1,html<input type ="radio"/> 只要名字一樣,就會自己自動是一個組,只會選中其中一個不會選中多個,不要有懷疑,如果即使其中一個默認加了checked="checked",也不會同時選中多個,如果同時選中多個,一定時name不一樣,自己認真檢查。
2,struts的radio傳值問題:如果是radio,對應于Boolean,我自己得出的結論是需要自己寫轉換器。關于轉換器的代碼寫法,參照園子里面的一個哥們的。直接寫了一個全局轉換器:http://www.rzrgm.cn/linjiqin/archive/2011/03/16/1986565.html
經驗總結:
先寫出最小的的功能模塊,把整條路走通,再進行多種可能的測試,在都通過的情況下,再完成其它的同樣任務的其它模塊,這樣在最少代碼的情況下,出現錯誤容易準確的排查出來,以上就是因為代碼寫的太多,再去測試,出了問題,就算自己猜出了出問題的原因,也找不出出問題的地方,最后反到懷疑是html本身不支持了。
浙公網安備 33010602011771號