为“favoriteMap”,值为favoriteMap的数据对象。favoriteMap是所有兴趣爱好的选项,在实际的应用中,你可以从数据库中或配置文件中进行加载。
当请求中绑定了favoriteMap时,对应的表单页面就可以遍历该Map并动态构造出复选框列表了:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>宝宝淘论坛用户注册</title>
</head>
<body>
<form:form>
…
兴趣爱好:
<c:forEach items="${favoriteMap}" var="favorite">①引用favoriteMap的请求属性
②引用Map的键和值
<form:checkbox path="favorites" value="${favorite.key}" />${favorite.value}
</c:forEach>
<input type="submit" value="注册" name="testSubmit"/>
<input type="reset" value="重置" />
</form:form>
</body>
</html>
在①处,我们通过JSTL标签对属性名为favoriteMap的模型数据对象进行遍历,为每一个元素项生成一个复选框。注意②处的复选框代码,它有两个明显的特征:1)使用Spring复选框标签;2)通过EL引用Map类型的模型数据。由于favorite是Map类型,所以我们可以通过${favorite.key}和${favorite.value}引用Map元素的键和值。
提示:
对于同时使用JSTL和Spring表单标签的JSP文件,JSTL的标签会被首先解析,然后再解析Spring表单标签,因此如实例那样混合使用二者可以如预期一样输出正确的结果。
下拉框组件标签
下拉框标签的典型形式为: <form:select path="city" items="${cityList}"/>,它包括两方面的数据:1)对应表单对象属性值(city);2)用于构造整个下拉框选项的数据(cityList)。严格地说,下拉框组件分为单选和多选两种形式,当表单对象对应属性为复数形态的类型时(如String[]、List、Set),产生的目标组件为多选下拉框,反之为单选下拉框。
用于构造下拉框选项的数据也必须在referenceData()方法中准备好(可能从数据库字典表中加载或从外部配置文件中加载):
代码清单 4 UserRegisterController:为下拉框标签准备数据
package com.baobaotao.web.user;
…
public class UserRegisterController extends SimpleFormController {
@Override
protected Map referenceData(HttpServletRequest request) throws Exception {
Map favoriteMap = new LinkedHashMap();
favoriteMap.put("1", "computer");
favoriteMap.put("2", "sport");
favoriteMap.put("3", "entertainment");
favoriteMap.put("4", "literature");
List cityList = new ArrayList();①为下拉框选项准备的数据
cityList.add("北京");
cityList.add("上海");
cityList.add("天津");
cityList.add("厦门");
return new ModelMap()
.addObject("favoriteMap", favoriteMap)
.addObject("cityList", cityList);
}
…
}
这时,生成的下拉框HTML代码如下所示:
<select id="city" name="city" > ①
<option value="北京">北
|