Spring MVC表单标签库
1、Student 实体类
package com.southwind.entity2;
import lombok.Data;
@Data
public class Student {
private Integer id;
private String name;
private Integer age;
private String gender; }
2、Handler
package com.southwind.controller;
import com.southwind.entity2.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/student")
public class StudentHandler {
@RequestMapping("/get")
public String get(Model model){
Student student = new Student();
student.setId(1);
student.setName("张三");
student.setAge(22);
student.setGender("男");
model.addAttribute("student",student);
return "student";
}
}
3、JSP
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html> <head>
<title>Title</title>
</head> <body>
<h1>修改学⽣信息</h1>
<form action="" method="post">
学⽣编号:<input type="text" name="id" value="${student.id}" readonly/>
<br/>
学⽣姓名:<input type="text" name="name" value="${student.name}"/><br/>
学⽣年龄:<input type="text" name="age" value="${student.age}"/><br/>
学⽣性别:<input type="text" name="gender" value="${student.gender}"/>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
使用 Spring MVC 表单标签可以直接将业务数据绑定到 JSP 表单中,非常简单。
表单标签库的使用
1、JSP 页面导入 Spring MVC 表单标签库。
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
2、将 form 表单与业务数据进行绑定,通过 modelAttribute 属性完成绑定,将 modelAttribute 的值设置为控制器向 model 对象存值时的 name 即可。
<form:form modelAttribute="student" action="/student/update" method="post">
学⽣编号:<form:input path="id"></form:input><br/>
学⽣姓名:<form:input path="name"></form:input><br/>
学⽣年龄:<form:input path="age"></form:input><br/>
学⽣性别:<form:input path="gender"></form:input><br/>
<input type="submit" value="提交"/>
</form:form>
常用标签
1、form 标签
<form:form modelAttribute="student" method="post"></form:form>
渲染的是 HTML 中的 ,通过 modelAttribute 属性绑定具体的业务数据。
2、input 标签
<form:input path="name"></form:input>
渲染的是 HTML 中的 ,from 标签绑定的是业务数据,input 标签绑定的是业务数据中的属性值,通过 path 与业务数据的属性名对应,并支持级联。
package com.southwind.entity2;
import lombok.Data;
@Data
public class Address {
private Integer id;
private String name; }
package com.southwind.entity2;
import lombok.Data;
@Data
public class Student {
private Integer id;
private String name;
private Integer age;
private String gender;
private Address address; }
@RequestMapping("/get")
public String get(Model model){
Student student = new Student();
student.setId(1);
student.setName("张三");
student.setAge(22);
student.setGender("男");
Address address = new Address();
address.setId(1);
address.setName("科技路");
student.setAddress(address);
model.addAttribute("student",student);
return "student2"; }
<form:form modelAttribute="student" action="/student/update" method="post">
学⽣编号:<form:input path="id"></form:input><br/>
学⽣姓名:<form:input path="name"></form:input><br/>
学⽣年龄:<form:input path="age"></form:input><br/>
学⽣性别:<form:input path="gender"></form:input><br/>
学⽣地址:<form:input path="address.name"></form:input><br/>
<input type="submit" value="提交"/>
</form:form>
3、password 标签
<form:password path="password"></form:password>
渲染的是 HTML 中的 ,通过 path 与业务数据的属性名对应,password 标签的值不会在页面显示。
4、checkbox 标签
<form:checkbox path="hobby" value="读书"></form:checkbox>
渲染的是 HTML 中的 ,通过 path 与业务数据的属性名对应,可以绑定boolean、数组和集合。如果绑定 boolean 类型的变量,该变量值为 true,则表示选中,false 表示不选中
student.setFlag(true);
checkbox:<form:checkbox path="flag" value="1"></form:checkbox>
如果绑定数组和集合类型,集合中的元素等于 checkbox 的 value 值,则该项选中,否则不选中。
student.setHobby(Arrays.asList("读书","看电影","旅⾏"));
<form:checkbox path="hobby" value="读书"></form:checkbox>读书<br/>
<form:checkbox path="hobby" value="看电影"></form:checkbox>看电影<br/>
<form:checkbox path="hobby" value="打游戏"></form:checkbox>打游戏<br/>
<form:checkbox path="hobby" value="听⾳乐"></form:checkbox>听⾳乐<br/>
<form:checkbox path="hobby" value="旅⾏"></form:checkbox>旅⾏<br/>
5、checkboxs 标签
<form:checkboxs items="${student.hobby}" path="selectHobby"></form:checkboxs>
渲染的是 HTML 中的⼀组 ,这⾥需要结合 items 和 path 两个属性来使用,items 绑定被遍历的集合或数组,path 绑定选中的集合或数组,items 是全部选型,path 为默认选中的选型。
student.setHobby(Arrays.asList("读书","看电影","打游戏","听⾳乐","旅⾏"));
student.setSelectHobby(Arrays.asList("读书","看电影"));
<form:checkboxes path="selectHobby" items="${student.hobby}">
</form:checkboxes>
需要注意的是 path 可以直接绑定业务数据的属性,items 则需要通过 EL 表达式从域对象中取值,不能直接写属性名。
6、radiobutton 标签
<form:radiobutton path="radioId" value="0"></form:radiobutton>
渲染的是 HTML 中的⼀个 ,绑定的数据与标签的 value 值相等为选中状态,否则为不选中状态。
student.setRadioId(1);
<form:radiobutton path="radioId" value="0"></form:radiobutton>男
<form:radiobutton path="radioId" value="1"></form:radiobutton>⼥
7、radiobuttons 标签
<form:radiobuttons items="${student.grade}" path="selectGrade">
</form:radiobuttons>
渲染的是 HTML 中的⼀组 ,这⾥需要结合 items 和 path 两个属性来使用,items 绑定被遍历的集合或数组,path 绑定被选中的值,items 是全部选型,path 为默认选中的选型。
Map<Integer,String> gradeMap = new HashMap<>();
gradeMap.put(1,"⼀年级");
gradeMap.put(2,"⼆年级");
gradeMap.put(3,"三年级");
gradeMap.put(4,"四年级");
gradeMap.put(5,"五年级");
gradeMap.put(6,"六年级");
student.setGradeMap(gradeMap);
student.setSelectGrade(3);
<form:radiobuttons path="selectGrade" items="${student.gradeMap}">
</form:radiobuttons>
8、select 标签
<form:select items="${student.citys}" path="selectCity"/>
渲染的是 HTML 中的⼀个 ,这⾥需要结合 items 和 path 两个属性来使用,items 绑定被遍历的集合或数组,path 绑定被选中的值,用法与 radiobuttons 标签⼀致。
Map<Integer,String> cityMap = new HashMap<>();
cityMap.put(1,"北京");
cityMap.put(2,"上海");
cityMap.put(3,"⼴州");
cityMap.put(4,"深圳");
student.setCityMap(cityMap);
student.setSelectCity(2);
<form:select path="selectCity" items="${student.cityMap}"></form:select>
9、form:select 标签结合 form:options 使y用
form:select 只定义 path 属性,在 form:select 标签内部添加⼀个子标签 form:options,设置 items 属性。
<form:select path="selectCity">
<form:options items="${student.cityMap}"></form:options>
</form:select>
10、form:select 标签结合 form:option 使用
form:select 定义 path 属性,给每⼀个 form:option 设置 value 属性,path 与哪个 value 相等,该项默认选中。
<form:select path="selectCity">
<form:option value="1">⻄安</form:option>
<form:option value="2">杭州</form:option>
<form:option value="3">成都</form:option>
</form:select>
Spring MVC国际化
国际化是指同⼀个应用程序在不同语言设置的浏览器中,自动显示不同的语言,Spring MVC 对国际化操作做了很好的集成,只需要简单配置即可实现国际化。
1、springmvc.xml 配置。
<!-- 国际化资源⽂件 -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSour
ce">
<!-- 多语⾔配置⽂件放在根路径,以 language 开头 -->
<property name="basename" value="classpath:language"></property>
<property name="useCodeAsDefaultMessage" value="true"></property>
</bean>
<!-- 拦截器 -->
<mvc:interceptors>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"></property>
</bean>
</mvc:interceptors>
<!-- 配置 SessionLocaleResolver,动态获取 Locale 对象,存⼊ Session -->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
2、创建国际化资源⽂件 language_en_US.properties,language_zh_CN.properties,分别存储英文和中文资源。
language.cn = \u4E2D\u6587
language.en = English
info = login
username = username
password = password
repassword = repassword
tel = tel
email = email
submit = submit
reset = reset
language.cn = \u4E2D\u6587
language.en = English
info = \u767B\u9646
username = \u7528\u6237\u540D
password = \u5BC6\u7801
repassword = \u786E\u8BA4\u5BC6\u7801
tel = \u7535\u8BDD
email = \u7535\u5B50\u90AE\u7BB1
submit = \u63D0\u4EA4
reset = \u91CD\u7F6E
3、Handler
package com.southwind.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/inter")
public class InterHandler {
@GetMapping("/index")
public String index(){
return "inter";
}
}
4、JSP
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<html> <head>
<title>Title</title>
</head> <body>
<a href="index?lang=en_US">English</a>
<a href="index?lang=zh_CN">中⽂</a>
<h1><spring:message code="info"></spring:message></h1>
<form>
<spring:message code="username"/>:<input type="text"/><br/>
<spring:message code="password"/>:<input type="password"/><br/>
<spring:message code="repassword"/>:<input type="password"/><br/>
<spring:message code="tel"/>:<input type="text"/><br/>
<spring:message code="email"/>:<input type="text"/><br/>
<input type="submit" value="<spring:message code="submit"/> "/>
<input type="reset" value="<spring:message code="reset"/> "/>
</form>
</body>
</html>