免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 993 | 回复: 0
打印 上一主题 下一主题

Struts的html:checkBox标签 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-19 13:15 |只看该作者 |倒序浏览

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的属性值:
 
=================================================================================
以上为转载。
经过本人尝试之后,觉得此方法是行得通的。
其实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的选中状态不正确的问题。
现在自己解决的方法就是:加一个隐藏域。
这样作就增加了 seqNum 的长度,使其长度 > 1,暂时解决了提交问题。
假设: 某一览画面有multibox,并且对应3组数据。
作如下操作:1.第一条记录的checkbox钩上,提交,form得到第一条数据
2.把刚才钩上的checkbox钩掉,提交,form还是得到第一条数据,
并不是我们所想象的 seqNum = null 或者 seqNum.length=0。
解决方案还是原来的方法:
其中 value 只要不与 其他multibox混淆,理论上可以用任意值。
注:
document.all.seqNum[0] 指的是隐藏 seqNum 的值。
document.all.seqNum[1] 开始往后指的才是 真正画面上Multibox的东西。
但是这样做也会给一些其他的操作和算法带来麻烦,并不是万能的。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26845/showart_342821.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP