Struts1.x中的reset()何时调用与<html:checkbox>标签的重置

本文解决了Struts框架中html:checkbox标签无法保留用户选择状态的问题。通过在checkbox后添加一个同名隐藏输入框,实现了提交后保持checkbox状态的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:http://www.blogjava.net/lucky/archive/2006/04/14/41001.aspx

 

     被Struts的html:checkBox标签使用的小问题郁闷了两天,今天终于找到了解决的办法。如果大家也遇到同样的问题,可以参考。

1)需求:
        当通过菜单进入页面时,页面中的checkbox处于被选中状态,页面提交后forward回本页,对应的checkbox保持提交时的状态,也就是说:如果提交时checkbox是选中状态回来仍然是选中状态;如果用户在提交前将checkbox的勾去掉,回来时checkbox应该为为选中状态。
2)问题:
        这个需求看起来很简单,只需要
      1)在对应的form中将checkbox对应的属性设为true就行了:
                private boolean syaken = true;
      2)在对应的jsp中使用html:checkbox标签就行了
        <html:checkbox property="syaken"/>
      但问题是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的属性值:
          <html:checkbox property="syaken"/>&nbsp;
      <input type="hidden" name="syaken" value="false">

   
这个问题郁闷了我两天,没想到解决办法这么简单。
鸣谢与扩展:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值