struts2与checkbox的关系

本文介绍了Struts2框架如何处理checkbox元素。包括对html的input[type=checkbox]标签元素的处理方式,以及Struts2自定义checkbox标签的实现原理,并详细解释了Struts2对checkbox的拦截器的工作流程。

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

Struts2 框架对checkbox的处理
1、 对于html的input[type=checkbox]的标签元素,如果元素未被选中,则不作为参数提交。如果后台绑定参数是布尔类型,那么元素的选中值应该是布尔值的字符串。
2、 对于struts2的checkbox标签,会生成一个html的input[type=checkbox]的标签元素和一个html的input[type=hidden]的标签元素。如下所示:
<input type="checkbox" name="useOil" value="true" id=" useOil "/>
<input type="hidden" name="__checkbox_ useOil " value="true"/>
新增的hidden用来checkbox选中情况:
a) 当checkbox和hidden都提交到参数对象中,则表示checkbox选中
b) 当hiddeng提交到参数对象中,checkbox不存在,则表示checkbox没选中。
3、 附上struts2对checkbox的拦截器:

private static final long serialVersionUID = 0xf7dafd791c82b76fL;
private String uncheckedValue;
private static final Logger LOG = LoggerFactory.getLogger(org/apache/struts2/interceptor/CheckboxInterceptor);

public CheckboxInterceptor()
{
uncheckedValue = Boolean.FALSE.toString();
}

public String intercept(ActionInvocation ai)
throws Exception
{
Map parameters = ai.getInvocationContext().getParameters(); //上传参数集
Map newParams = new HashMap();
Set entries = parameters.entrySet();
Iterator iterator = entries.iterator();
do
{
if(!iterator.hasNext())
{
break;
}
java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next();
String key = (String)entry.getKey();
if(key.startsWith("__checkbox_")) //判断是否存在checkbox生成的hidden标签的参数,key 为 hidden的name[name="__checkbox_XXXX"]
{
String name = key.substring("__checkbox_".length());
Object values = entry.getValue();
iterator.remove();
if(values != null && (values instanceof String[]) && ((String[])(String[])values).length > 1) //复选不需判断
{
if(LOG.isDebugEnabled())
{
LOG.debug("Bypassing automatic checkbox detection due to multiple checkboxes of the same na" +
"me: #0"
, new String[] {
name
});
}
} else
if(!parameters.containsKey(name)) //判断checkbox标签是否作为参数上传
{
newParams.put(name, new String[] {
uncheckedValue //布尔类型字符串
});
}
}
} while(true);
parameters.putAll(newParams);
return ai.invoke();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值