Struts2 的checkbox标签,不选时返回false的问题

页面上有一组checkbox,映射到action中的 int[]。当不选中任何checkbox时出错。

 

环境:

    jdk 1.5

    struts 2.0.11.2

    xwork 2.0.5

 

在struts.xml中设置:

 

Console出错信息:



分析:
1、做了两断代码对比,都是生成一组checkbox,一个用手写的 <input type="checkbox">,另一个用struts2标签 <s:checkbox>
  结果:手写的,服务器得到的是null,可以正常处理;用struts2标签,得到false,无法转换为int[],出错。

2、看struts2源码
  发现原因在于struts2 checkbox 的template 和interceptor.
  在simple template中,对于每一个checkbox,都会生成一个hidden input,其name为"__checkbox_%checkbox的name%" 。看源码是希望找到开关设置不生成hidden input代码,可惜没有这个开关,一定会生成。


  struts2缺省使用了一系列的intecerptor,其中就有CheckboxInterceptor。在这个interceptor中,会判断是否选择了任意一个checkbox,如果没有,则将其值设为false(字符串形式) 
  相应代码如下:



解决思路:
  a. 在页面中加入一个与checkbox同名的hidden input,指定一个特殊的值,在action中进行参数校验时处理
  b. 使用不同的模板 //TODO
  c. 设置不使用Checkbox Interceptor (需要自行指定interceptor-ref,不能使用default)
  d. 修改struts代码,增加一个开关项,来选择是否为checkbox生成相应的hidden input (最好struts修改,自行修改会带来后续问题)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值