背景:最近需要写一个表单,就是最简单的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.cnblogs.com/linjiqin/archive/2011/03/16/1986565.html
经验总结:
先写出最小的的功能模块,把整条路走通,再进行多种可能的测试,在都通过的情况下,再完成其它的同样任务的其它模块,这样在最少代码的情况下,出现错误容易准确的排查出来,以上就是因为代码写的太多,再去测试,出了问题,就算自己猜出了出问题的原因,也找不出出问题的地方,最后反到怀疑是html本身不支持了。