Struts学习笔记之如何处理没有勾选的checkbox

4 篇文章 0 订阅

在HTML页面中,如果一个checkbox没有勾选,然后就submit,那么在request中是得不到它的值的。
假设页面上有一个checkbox,如下:
<html:form method="get" action="testcheckbox.do">
  <html:checkbox property="foo"/>
  <html:submit/>
</html:form>

如果checkbox被勾选,那么submit后request URL如下:
http://localhost:8080/TestStruts/testcheckbox.do?foo=on

Struts在处理的时候,通过BeanUtils.populate( )方法组装(populate)ActionForm,如果foo是一个boolean型属性,那么foo被设置为true。

如果checkbox没有被勾选,问题就发生了,foo属性没有按预期的那样被设置为false。
如果checkbox没有被勾选,那么submit后request URL如下:
http://localhost:8080/TestStruts/testcheckbox.do?

foo属性的值去哪里了呢?对于没有勾选的checkbox,request中没有相应的参数产生,所以BeanUtils.populate( )被调用的时候,不知道去设置属性值。

通常解决这个问题的方法是实现ActionForm的reset()方法,在ActionForm进行组装(populate)之前,Struts的request processor 会调用reset方法,这样你就可以改变form的属性。
如果HTTP request中不包含某个属性的名/值对,那么在reset( )方法中可以给它设置初始值。
例如:
public void reset( ActionMapping mapping, HttpServletRequest request ) {
    foo = false;
}

对于一般的这样问题可以使用这种方法来处理,但是,reset()方法并不是解决这个问题的唯一办法,如果你在session域中正在使用一个ActionForm,并实现了ActionForm的reset(),那么实现的reset() 方法会清空某些属性值,这不是你想要的。
这种时候就需要用另一种方法了,解决方法就是用html:hidden标签,定义一个隐藏字段,在ActionForm中也定义一个对于的属性,在提交的时候,用javascript onclick事件处理checkbox的值。

例如上面的例子用这种方法可以写成:
<html:form method="get" action="testcheckbox.do">
    <input type="checkbox" name="foo_" οnclick="javascript:elements['foo'].value=this.checked;"
      <logic:equal name="dForm" property="foo" value="true"> checked </logic:equal> >
    <html:hidden property="foo"/>
    <html:submit/>
</html:form>

当用户点击checkbox,就会把checkbox的值设置到隐藏字段中,这样就能确保checkbox不管是否勾选都有值可传。 

下载源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值