struts2与checkbox的关系

Struts2 框架对checkbox的处理
1、 对于html的input[type=checkbox]的标签元素,如果元素未被选中,则不作为参数提交。如果后台绑定参数是布尔类型,那么元素的选中值应该是布尔值的字符串。
2、 对于struts2的checkbox标签,会生成一个html的input[type=checkbox]的标签元素和一个html的input[type=hidden]的标签元素。如下所示:


新增的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();
}

你可能感兴趣的:(学习)