站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题Struts的html:checkBox标签问题 讨论

Struts的html:checkBox标签问题 讨论

摘要: Struts的html:checkBox标签问题 讨论



1)需求:
当通过菜单进入页面时,页面中的checkbox处于被选中状态,页面提交后forward回本页,对应的checkbox保持提交时的状态,也就是说:如果提交时checkbox是选中状态回来仍然是选中状态;如果用户在提交前将checkbox的勾去掉,回来时checkbox应该为为选中状态。

2)问题:
这个需求看起来很简单,只需要
1)在对应的form中将checkbox对应的属性设为true就行了:
private boolean syaken = true;
2)在对应的jsp中使用html:checkbox标签就行了

但问题是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的属性值:
 
<input type="hidden" name="syaken" value="false">
=================================================================================
以上为转载。

经过本人尝试之后,觉得此方法是行得通的。

其实multibox也存在相似问题。
假设: 在 form 里面定义 : private String[] seqNum = null;
当 seqNum 长度为 “1”的时候,也就是 jsp上显示的multibox 的个数为一个。
这个时候,在javascript里使用:
document.all.seqNum[0] , 通过alert(document.all.seqNum[0] ),发现结果是undefined,并不是我们所期望得到的checkbox的对象。
如果 seqNum 的长度 〉1, 则不出现以上的问题。

同时:如果 seqNum 的长度 = 1时,multibox提交到后台时,出现了上文同checkbox的选中状态不正确的问题。

现在自己解决的方法就是:认为的加一个隐藏域。
<input type="hidden" name="seqNum" value="-1">
这样作就增加了 seqNum 的长度,使其长度 > 1,暂时解决了提交问题。
但是这样做也会给一些其他的操作带来麻烦,并不时万能的。

总之解决这些问题有各种各样的做法,具体应该视具体情况而定,不知道各位大虾有没有更好的方法来解决这样的问题呢?提供给 小弟参考参考。拜谢!


up


↑返回目录
前一篇: 如何把JSPsmartUPload的upload.jps页面改为servlet?
后一篇: ie启动客户端应用程序的问题