向服务器端提交单个数据很简单,提交一组数据也不难:设成相同的name属性,服务器端收到数组形式然后处理即可。但是测试中发现checkbox设成相同的name属性之后,在struts2的Action里面无法得到正确的数据。具体表现是:只有选中的checkbox才有值,而且还是false。(PS:我使用struts2的自动类型转换,将checkbox的值转换为boolean数组)
试过设置value的值,但是没用。
于是就只有绕道而行了。网上有方法,说是在提交的时候,通过js来对checkbox遍历一下,组成一个字符串提交给服务器。这方法很简单,不提了。
在我查网上方法之前,我是这样做的:
首先添加一个js方法:
1: <script type="text/javascript" >
2: function changeState(v) {
3: var t = v.parentNode.children[1];
4: if(t.value=="true") {
5: t.value="false";
6: } else {
7: t.value="true";
8: }
9: }
10: </script>
注:关键是要找到hidden表单域,然后修改其值。试过nextSibling方法,但是不知道怎么回事,没用,所以暂且这样写,效果一样。
然后在每个checkbox之后添加一个hidden表单域,name属性设为服务器端需要接收的属性,再写checkbox的onclick事件调用上面的方法:
1: <input type="checkbox" οnclick="return changeState(this);"/>
2: <input type="hidden" name="isHideInMenu" value="false"/>
这种方法的关键是通过js把checkbox的值与一个hidden表单域关联在了一起,优点是提交的数组同样是一个数组,无需特殊处理,服务器端处理简单了。