8 Spring MVC 表单标签库

1 Spring MVC 表单标签库

  • Handler
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;
    }
}
  • JSP
<%@ 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"/>

2 常用的表单标签

  • form
<form:form modelAttribute="student"/>

渲染的是 HTML 中的

,通过 modelAttribute 属性绑定具体的数据模型。

  • input
<form:input path="name"/>

渲染的是 HTML 中的 ,form 标签绑定的是模型数据,input 标签绑定的是模型数据中的属性值,通过 path 属性可以与模型数据中的属性名对应,并且支持级联操作。

  • password
<form:password path="password"/>

渲染的是 HTML 中的 ,通过 path 属性与模型数据的属性值进行绑定,password 标签的值不会在页面显示。一般很少用到。

  • checkbox
<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
  • checkboxes
<form:checkboxes items=${student.hobby} path="selecthobby"/>

渲染的是 HTML 中的一组 ,是对 的一种简化,需要结合 items 和 path 属性来使用,items 绑定被遍历的集合或数组,path 绑定被选中的集合或数组。(items 为全部可选集合,path 为默认的选中集合)

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 表示式的形式从域对象中获取数据,不能直接写属性名。

  • radiobutton
<form:radiobutton path="radioId" value="0"/>

渲染的是 HTML 中的一个 ,绑定的数据与标签的 value 值相等则为选中,否则不选中。

  • radiobuttons
<form:radiobuttons items="${student.grade}" path="selectGrade"/>

渲染的 HTML 中的一组 ,这里需要结合 items 和 path 两个属性来使用,用法和 一致。

  • select
<form:select items="${student.citys}" path="selectCity"/>

渲染的是 HTML 中的一个