SpringMVC表单标签(3)

1.5 Checkboxes标签

相对于一个checkbox标签只能生成一个对应的复选框而言,一个checkboxes标签将根据其绑定的数据生成N个复选框。checkboxes绑定的数据可以是数组、集合和Map。在使用checkboxes时我们有两个属性是必须指定的,一个是path,另一个是itemsItems表示当前要用来展现的项有哪些,而path所绑定的表单对象的属性表示当前表单对象拥有的项,即在items所展现的所有项中表单对象拥有的项会被设定为选中状态。先来看以下一段代码:

Jsp代码 

  1. <form:form action="formTag/form.do" method="post" commandName="user">
  2. <table>
  3. <tr>
  4. <td>Roles:</td>
  5. <td>
  6. <form:checkboxes path="roles" items="${roleList}"/>
  7. </td>
  8. </tr>
  9. <tr>
  10. <td colspan="2"><input type="submit" value="提交"/></td>
  11. </tr>
  12. </table>
  13. </form:form>

<form:form action="formTag/form.do" method="post" commandName="user">

    <table>

        <tr>

           <td>Roles:</td>

            <td>

               <form:checkboxes path="roles" items="${roleList}"/>

            </td>

        </tr>

        <tr>

            <td colspan="2"><input type="submit" value="提交"/></td>

        </tr>

    </table>

</form:form>

上面的JSP视图对应着如下的处理器方法:

Java代码 

  1. @RequestMapping(value="form", method=RequestMethod.GET)
  2. public String formTag(Map<String, Object> map) {
  3. User user = new User();
  4. List<String> roles = new ArrayList<String>();
  5. roles.add("role1");
  6. roles.add("role3");
  7. user.setRoles(roles);
  8. List<String> roleList = new ArrayList<String>();
  9. roleList.add("role1");
  10. roleList.add("role2");
  11. roleList.add("role3");
  12. map.put("user", user);
  13. map.put("roleList", roleList);
  14. return"formTag/form";
  15. }

    @RequestMapping(value="form", method=RequestMethod.GET)

    public String formTag(Map<String, Object> map) {

       User user = new User();

       List<String> roles = new ArrayList<String>();

       roles.add("role1");

       roles.add("role3");

       user.setRoles(roles);

       List<String> roleList = new ArrayList<String>();

       roleList.add("role1");

       roleList.add("role2");

       roleList.add("role3");

       map.put("user", user);

       map.put("roleList", roleList);

       return "formTag/form";

    }

从以上代码中我们可以看到我们放在ModelMap中的roleList对象有三个元素,分别是role1role2role3,而我们的表单对象Userroles属性只拥有两个元素,分别是role1role3,,所以当我们访问该处理器方法返回如上所示的视图页面时,我们要展现的复选框项是roleList,也就是role1role2role3,而我们表单对象只拥有role1role3,所以在页面进行渲染的时候会展示3个复选框项,但只有role1role3会被设定为选中状态。

上面介绍的这种情况是使用List作为展现复选框项的数据源,这种情况我们已经看到了它所呈现出来的标签Label和它的值是一样的。使用ArraySet作为数据源也是这种情况。那么如果要让checkboxes呈现出来的Label和实际上送的value不同的话应该怎么做呢?这个时候我们就可以使用Map作为数据源了。使用Map作为checkboxesitems属性的数据源时Key将作为真正的复选框的value,而Mapvalue将作为Label进行展示。当使用Map作为checkboxesitems属性的数据源时我们绑定的表单对象属性的类型可以是Array、集合和Map,这种情况就是判断items Map中是否含有对应的key来决定当前的复选框是否处于选中状态。我们来看以下一个处理器方法以及其对应的视图代码。

处理器方法:

Java代码 

  1. @RequestMapping(value="form", method=RequestMethod.GET)
  2. public String formTag(Map<String, Object> map) {
  3. User user = new User();
  4. List<String> roles = new ArrayList<String>();
  5. roles.add("role1");
  6. roles.add("role3");
  7. user.setRoles(roles);
  8. Map<String, String> roleMap = new HashMap<String, String>();
  9. roleMap.put("role1", "角色1");
  10. roleMap.put("role2", "角色2");
  11. roleMap.put("role3", "角色3");
  12. map.put("user", user);
  13. map.put("roleMap", roleMap);
  14. return"formTag/form";
  15. }

    @RequestMapping(value="form", method=RequestMethod.GET)

    public String formTag(Map<String, Object> map) {

       User user = new User();

       List<String> roles = new ArrayList<String>();

       roles.add("role1");

       roles.add("role3");

       user.setRoles(roles);

       Map<String, String> roleMap = new HashMap<String, String>();

       roleMap.put("role1", "角色1");

       roleMap.put("role2", "角色2");

       roleMap.put("role3", "角色3");

       map.put("user", user);

       map.put("roleMap", roleMap);

       return "formTag/form";

    }

对应的视图代码:

Jsp代码 

  1. <form:form action="formTag/form.do" method="post" commandName="user">
  2. <table>
  3. <tr>
  4. <td>Roles:</td>
  5. <td>
  6. <form:checkboxes path="roles" items="${roleMap}"/>
  7. </td>
  8. </tr>
  9. <tr>
  10. <td colspan="2"><input type="submit" value="提交"/></td>
  11. </tr>
  12. </table>
  13. </form:form>

<form:form action="formTag/form.do" method="post" commandName="user">

    <table>

        <tr>

            <td>Roles:</td>

            <td>

               <form:checkboxes path="roles" items="${roleMap}"/> 

            </td>

        </tr>

        <tr>

            <td colspan="2"><input type="submit" value="提交"/></td>

        </tr>

    </table>

</form:form>

这个时候我们知道会呈现出3个复选框,而checkboxes绑定的表单对象userroles属性是一个集合对象,其包含的两个元素都能在checkboxesitems数据源中找到对应的Key,所以以这两个元素为valuecheckbox将处于选中状态。效果如下:

当我们使用Array或者集合作为数据源,且里面的元素都是一个一个POJO时,我们还可以使用checkboxes标签的itemLabelitemValue属性来表示使用数组或者集合中元素对象的哪一个属性作为需要呈现的单选框的labelvalue

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章