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
1 2 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Dept implements 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>
|
请求处理方法
1 2 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"; }
|
表单标签
1 2 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>
|
渲染效果
1 2 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>
|
请求处理方法
1 2 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"; }
|
表单标签库
1 2 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
成员变量,
渲染结果
1 2 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>
|
请求处理方法
1 2 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"; }
|
表单标签数据绑定
1 2 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
作为显示文本。
渲染效果
1 2 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>
|
请求处理方法
1 2 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
当中。
表单标签
1 2 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
。
渲染效果
1 2 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>
|
显示效果