package com.southwind.controller;
import com.southwind.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/tag")
public class TagHandler {
@GetMapping("get")
public ModelAndView get(){
ModelAndView modelAndView = new ModelAndView("tag");
Student student = new Student(1L,"张三",14);
modelAndView.addObject("student",student);
return modelAndView;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<title>Titletitle>
head>
<body>
<h1>学生信息h1>
<form:form modelAttribute="student">
学生ID:<form:input path="id"/>
学生姓名:<form:input path="name"/>
学生年龄:<form:input path="age"/>
<input type="submit" value="提交"/>
form:form>
body>
html>
1、JSP 页面导入 Spring MVC 表单标签库,与导入 JSTL 标签库的语法非常相似,前缀 prefix 可以自定义,通常定义为 form
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
2、将 form 表单与模型数据进行绑定,通过 modelAttribute 属性完成绑定,将 modelAttribute 的值设置为模型数据对应的 key 值。
Handler: modelAndView.addObject("student",student);
JSP:
3、form 表单完成绑定之后,将模型数据的值取出绑定到不同的标签中,通过设置标签的 path 属性完成,将 path 属性的值设置为模型数据对应的属性名即可。
学生ID:<form:input path="id"/>
学生姓名:<form:input path="name"/>
学生年龄:<form:input path="age"/>
<form:form modelAttribute="student"/>
渲染的是 HTML 中的
,通过 modelAttribute 属性绑定具体的数据模型。<form:input path="name"/>
渲染的是 HTML 中的 ,form 标签绑定的是模型数据,input 标签绑定的是模型数据中的属性值,通过 path 属性可以与模型数据中的属性名对应,并且支持级联操作。
<form:password path="password"/>
渲染的是 HTML 中的
<form:checkbox path="hobby" value="读书"/>
渲染的是 HTML 中的 ,通过 path 与模型数据的属性值进行绑定,可以绑定 boolean、数组和集合。
如果绑定 boolean 值,若该值为 true,则表示该复选框选中,否则不选中。
如果绑定数组或者集合,数组/集合中的元素等于 checkbox 的 value 值,则选中。
student.setHobby(Arrays.asList("A2","A4"));
modelAndView.addObject("student",student);
爱好: <form:checkbox path="hobby" value="A1">form:checkbox>A1
<form:checkbox path="hobby" value="A2">form:checkbox>A2
<form:checkbox path="hobby" value="A3">form:checkbox>A3
<form:checkbox path="hobby" value="A4">form:checkbox>A4
<form:checkboxes items=${student.hobby} path="selecthobby"/>
渲染的是 HTML 中的一组 ,是对
student.setHobby(Arrays.asList("A1","A2","A3","A4"));
student.setSelecthobby(Arrays.asList("A2","A4"));
modelAndView.addObject("student",student);
爱好:<form:checkboxes path="selecthobby" items="${student.hobby}">form:checkboxes>
需要注意的是:path 可以直接绑定模型数据的属性值,items 则需要通过 EL 表示式的形式从域对象中获取数据,不能直接写属性名。
<form:radiobutton path="radioId" value="0"/>
渲染的是 HTML 中的一个 ,绑定的数据与标签的 value 值相等则为选中,否则不选中。
<form:radiobuttons items="${student.grade}" path="selectGrade"/>
渲染的 HTML 中的一组 ,这里需要结合 items 和 path 两个属性来使用,用法和
<form:select items="${student.citys}" path="selectCity"/>
渲染的是 HTML 中的一个 标签,需要结合 items 和 path 两个属性来使用,items 绑定被遍历的集合或数组,path 绑定被选中的值,用法与
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>
<form:select path="selectCity">
<form:options items="${student.cityMap}">form:options>
form:select>
form:select 结合 form:options 的使用
,form:selelct 只定义 path 属性, 在 form:select 标签内部添加一个子标签 form:options,设置 items 属性
,获取被遍历的集合。
<form:select path="selectCity">
<form:option value="1">杭州form:option>
<form:option value="2">西安form:option>
<form:option value="3">上海form:option>
form:select>
form:select 结合 form:option 的使用
,form:select 定义 path 属性,给每一个form:option 设置 value 值,path 的值与哪个 value 值相等,该项默认选中
。
student.setIntroduce("你好,我是一杯BUG");
<form:textarea path="introduce">form:textarea>
渲染的是 HTML 中的一个 ,path 绑定模型数据的属性值,作为文本输入域的默认值。
处理错误信息,一般用在数据校验,该标签需要结合 Spring MVC 的验证器结合起来使用。