`
zjxs_sky100
  • 浏览: 28412 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

struts2与checkbox的关系

阅读更多
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();
    }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics