4.1.10 select标签
Spring MVC的select标签会渲染一个HTML的select元素。
被渲染元素的选项可能来自其items属性的一个Collectin、Map及Array, 或者来自一个嵌套的option或者options标签。
属性
select标签可使用如表4.11所示的属性。
表4.11中列出的只是Spring MVC的select标签的常用属性, 并没有包含HTML的相关属性。
| 属性 | 描述 | 
| cssclass | 定义要应用到被渲染的 select元素的CS类 | 
| cssStyle | 定义要应用到被渲染的 select元素的CSS样式 | 
| cssErrorClass | 定义要应用到被渲染的 select元素的CSS类,如果bound属性中包含错误,则覆盖cssclass属性值 | 
| htmlEscape | boolean值,表示被渲染的值是否应该进行HTML转义 | 
| path | 要绑定的属性路径 | 
| items | 用于生成 select元素的对象的Collection,Map或者Array | 
| itemLabel | item属性中定义的Collection、Map或者Array中的对象属性,为每个select元素提供label | 
| itemValue | item属性中定义的Collection、Map或者Array中的对象属性,为每个select元素提供值 | 
items属性
其中,items属性特别有用, 因为它可以绑定到对象的Collection、Map、Array上, 为select元素生成选项。
领域对象
User.java
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | public class User
 implements Serializable
 {
 private static final long serialVersionUID = 1L;
 
 private Integer deptId;
 public User()
 {
 super();
 
 }
 
 }
 
 | 
Dept
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | public class Deptimplements Serializable
 {
 private static final long serialVersionUID = 1L;
 private Integer id;
 private String name;
 public Dept()
 {
 super();
 
 }
 public Dept(Integer id, String name)
 {
 super();
 this.id = id;
 this.name = name;
 }
 
 }
 
 | 
option标签
Spring MVC的option标签会渲染select元素中使用的一个HTML的option元素。
option标签可使用如表 4.12 所示的属性。
表 4.12 中列出的只是Spring MVC的option标签的常用属性, 并没有包含HTML的相关属性。
属性
| 属性 | 描述 | 
| cssClass | 定义要应用到被渲染的 option元素的CSS类 | 
| cssStyle | 定义要应用到被渲染的 option元素的CSS样式 | 
| cssErrorClass | 定义要应用到被渲染的 option元素的CSS类,如果bound属性中包含错误,则覆盖cssClass属性值 | 
| htmlEscape | boolean值,表示被渲染的值是否应该进行HTML转义 | 
测试链接
| 1
 | <a href="selectForm">selectForm</a><br>
 | 
请求处理方法
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | @GetMapping(value = "/selectForm")public String selectForm(Model model)
 {
 User user = new User();
 
 user.setDeptId(2);
 model.addAttribute("user", user);
 return "selectForm";
 }
 
 | 
表单标签
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | <!--绑定模型中的user属性 --><form:form modelAttribute="user" method="post" action="selectForm">
 <table>
 <tr>
 <td>部门:</td>
 <!-- 绑定user属性表示的对象中的depathID成员变量 -->
 <!-- 如果该成员变量与下面的option标签的value属性的属性值相等的话 -->
 <!-- 就默认选中该选项 -->
 <td><form:select path="deptId">
 <form:option value="1">财务部</form:option>
 <form:option value="2">开发部</form:option>
 <form:option value="3">销售部</form:option>
 </form:select></td>
 </tr>
 </table>
 </form:form>
 
 | 
渲染效果
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | <form id="user" action="selectForm" method="post">
 <table>
 <tr>
 <td>部门:</td>
 
 
 
 <td>
 <select id="deptId" name="deptId">
 <option value="1">财务部</option>
 <option value="2" selected="selected">开发部</option>
 <option value="3">销售部</option>
 </select>
 </td>
 </tr>
 </table>
 </form>
 
 | 
可以看到第二个选项设置了selected="selected"属性,该选型会默认选中.具体选中哪个选项通过设置绑定的对象的对应属性的值来设定,对象的值和选项的value属性相等的会被默认选中.
显示效果
![这里有一张图片]()
select标签 map作为数据源
测试链接
| 1
 | <a href="selectForm2">selectForm2</a><br>
 | 
请求处理方法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | @GetMapping(value = "/selectForm2")public String selectForm2(Model model)
 {
 User user = new User();
 
 user.setDeptId(2);
 
 Map<Integer, String> deptMap = new HashMap<Integer, String>();
 deptMap.put(1, "财务部");
 deptMap.put(2, "开发部");
 deptMap.put(3, "销售部");
 model.addAttribute("user", user);
 model.addAttribute("deptMap", deptMap);
 return "selectForm2";
 }
 
 | 
表单标签库
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | <form:form modelAttribute="user" method="post" action="selectForm2"><table>
 <tr>
 <td>部门:</td>
 <td><form:select path="deptId" items="${deptMap}" />
 </td>
 </tr>
 </table>
 </form:form>
 
 | 
form标签的modelAttribute="user"表示绑定model中的user属性也就是user对象.
Spring MVC的select标签的path="deptId"属性表示该select标签绑定user对象的deptId成员变量,
渲染结果
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <form id="user" action="selectForm2" method="post"><table>
 <tr>
 <td>部门:</td>
 <td>
 <select id="deptId" name="deptId">
 <option value="1">财务部</option>
 <option value="2" selected="selected">开发部</option>
 <option value="3">销售部</option>
 </select>
 </td>
 </tr>
 </table>
 </form>
 
 | 
显示效果
![这里有一张图片]()
使用这种方式将使用map中的值作为显示文本,使用key作为option标签的value属性
options标签
Spring MVC的options标签会渲染select元素中使用的一个HTML的option元素列表。options标签可使用如表 4.13 所示的属性。 表 4.13 中列出的只是Spring MVC的options标签的常用属性, 并没有包含HTML的相关属性。
| 属性 | 描述 | 
| cssClass | 定义要应用到被渲染的 option元素的CSS类 | 
| cssStyle | 定义要应用到被渲染的 option元素的CSS样式 | 
| cssErrorclass | 定义要应用到被渲染的 option元素的CSS类,如果bound属性中包含错误,则覆盖cssClass属性值 | 
| htmlEscape | boolean值,表示被渲染的值是否应该进行HIML转义 | 
| items | 用于生成 option列表元素的对象的Collection、Map或者Array | 
| itemLabel | items属性中定义的Collection,Map或者Array中的对象属性,为每个option元素提供label | 
| itemValue | items属性中定义的Collection,Map或者Array中的对象属性,为每个option元素提供值 | 
select option标签 map数据源
测试链接
| 1
 | <a href="selectForm3">selectForm3</a><br>
 | 
请求处理方法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | @GetMapping(value = "/selectForm3")public String selectForm3(Model model)
 {
 User user = new User();
 user.setDeptId(2);
 
 Map<Integer, String> deptMap = new HashMap<Integer, String>();
 deptMap.put(1, "财务部");
 deptMap.put(2, "开发部");
 deptMap.put(3, "销售部");
 model.addAttribute("user", user);
 model.addAttribute("deptMap", deptMap);
 return "selectForm3";
 }
 
 | 
表单标签数据绑定
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | <form:form modelAttribute="user" method="post" action="selectForm"><table>
 <tr>
 <td>部门:</td>
 <td><form:select path="deptId">
 <form:options items="${deptMap}" />
 </form:select></td>
 </tr>
 </table>
 </form:form>
 
 | 
使用map作为数据源的options标签时,使用map的key作为option标签的value属性的值,使用map的value作为显示文本。
渲染效果
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <form id="user" action="selectForm" method="post"><table>
 <tr>
 <td>部门:</td>
 <td>
 <select id="deptId" name="deptId">
 <option value="1">财务部</option>
 <option value="2" selected="selected">开发部</option>
 <option value="3">销售部</option>
 </select>
 </td>
 </tr>
 </table>
 </form>
 
 | 
显示效果
![这里有一张图片]()
select options绑定Object列表
Spring MVC的options标签会渲染select元素中使用的一个HTML的option元素列表。options标签可使用如表 4.13 所示的属性。 表 4.13 中列出的只是Spring MVC的options标签的常用属性, 并没有包含HTML的相关属性。
4.1.12 options标签
在实际开发中,经常会出现一种情况,即**select下拉框中的数据来自于数据库的表数据,并且获取的数据被封装到JavaBean中。此时,就可以使用select标签或者**options标签的items、itemLabel和itemValue属性来加载数据。
测试链接
| 1
 | <a href="selectForm4">selectForm4</a><br>
 | 
请求处理方法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | @GetMapping(value = "/selectForm4")public String selectForm4(Model model)
 {
 User user = new User();
 user.setDeptId(2);
 
 
 List<Dept> deptList = new ArrayList<Dept>();
 deptList.add(new Dept(1, "财务部"));
 deptList.add(new Dept(2, "开发部"));
 deptList.add(new Dept(3, "销售部"));
 model.addAttribute("user", user);
 model.addAttribute("deptList", deptList);
 return "selectForm4";
 }
 
 | 
在selectForm4方法中模拟从数据库中获取部门信息,并将其封装到Dept对象中,且将多个部门信息装载到List集合中,最后添加到Model当中。
表单标签
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | <form:form modelAttribute="user" method="post" action="selectForm"><table>
 <tr>
 <td>部门:</td>
 <td><form:select path="deptId">
 <!--itemLabel表示该对象的要显示的提示文本 -->
 <!--itemValue表示使用显示该对象的id成员变量的值作为option标签的value属性 -->
 <form:options items="${deptList}"
 itemLabel="name" itemValue="id" />
 </form:select></td>
 </tr>
 </table>
 </form:form>
 
 | 
selectForm4.jsp页面的options标签的items标签加载Model中的deptList,并将集合中的Dept对象的id属性设置为option的value,name属性设置为option的label。
渲染效果
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | <form id="user" action="selectForm" method="post"><table>
 <tr>
 <td>部门:</td>
 <td>
 <select id="deptId" name="deptId">
 <option value="1">财务部</option>
 <option value="2" selected="selected">开发部</option>
 <option value="3">销售部</option>
 </select>
 </td>
 </tr>
 </table>
 </form>
 
 | 
显示效果
![这里有一张图片]()