1.form标签

  • 一般情况下,通过 GET 请求获取表单页面,而通过POST 请求提交表单页面,因此获取表单页面和提交表单页面的 URL 是相同的。只要满足该最佳条件的契约, 标签就无需通过 action 属性指定表单提交的 URL

  • 可以通过 modelAttribute 属性指定绑定的模型属性,若没有指定该属性,则默认从 request 域对象中读取command 的表单 bean,如果该属性值也不存在,则会发生错误。

  • form标签的属性

  • SpringMVC提供了多个表单组件标签,如、 等,用以绑定表单字段的属性值,它们的共有属性如下:

    • path:表单字段,对应 html 元素的 name 属性,支持级联属性

    • htmlEscape:是否对表单值的 HTML 特殊字符进行转换,默认值为 true

    • cssClass:表单组件对应的 CSS样式类名

    • cssErrorClass:表单组件的数据存在错误时,采取的 CSS样式

2.input标签

  • 简单的使用案例:

registerForm.jsp

<!-- 如果不设置modelAttribute属性,会取属性名为command的对应属性值 -->
<form:form  method="post" action="register" modelAttribute="user" >
    姓名:<form:input path="username"/><br/>
    性别:<form:input path="sex"/><br/>
    年龄:<form:input path="age"/><br/>
</form:form>

User.java

public class User {
    private String username;
    private String sex;
    private Integer age;
    //...
}

UserController.java

    @RequestMapping("/registerForm")
    public String registerForm(Model model){
        User user=new User("张三","男",20);
      //model.addAttribute("command",user);
        model.addAttribute("user",user);
        return "registerForm";
    }

3.password标签

  • password标签的用法跟input标签相似,也能绑定表单数据,只是它生成的是一个密码框,并且多了一个showPassword属性

<form:password path="password"/>

4.hidden标签

  • 用法跟input相似,也能绑定表单数据,只是它生成的是一个隐藏域

<form:hidden path="id"/>

5.textarea标签

  • 是一个支持多行输入的HTML元素

<form:textarea path="remark" rows="5" cols="20"/>

6.checkbox标签

  • 会被渲染为一个类型为checkbox的普通HTML input标签

checkboxForm.jsp

<!-- label为被渲染的复选框的值 -->
<form:form method="post" action="checkboxForm" modelAttribute="user">
    <!-- 当绑定的为数组、List、Set时,checkbox的value属性在绑定的列表数据中存在则为选中状态 -->
    <form:checkbox path="courses" value="Spring" label="Spring"/>&nbsp;
    <form:checkbox path="courses" value="SpringMVC" label="SpringMVC"/>&nbsp;
    <form:checkbox path="courses" value="MyBatis" label="MyBatis"/>&nbsp;
    <!-- 当绑定的是一个boolean数据时,true为选中,false为不选中 -->
    <form:checkbox path="reader" value="true"/>已经阅读相关协议
</form:form>

User1.java

public class User1 {
    private boolean reader;
    private List<String> courses;
    //...
}

UserController.java

    @RequestMapping(value = "/checkboxForm",method = RequestMethod.GET)
    public String checkboxForm(Model model){
        User1 user=new User1();
        //设置boolean变量reader的值为true,页面的checkbox复选框会被选中
        user.setReader(true);
        //为集合变量courses添加属性,页面对应的会被选中
        List<String> courses=new ArrayList<>();
        courses.add("SpringMVC");
        courses.add("MyBatis");
        user.setCourses(courses);
        model.addAttribute("user",user);
        return "checkboxForm";
    }

7.checkboxes标签

Department.java

//之后的页面使用id作为value,name作为label
public class Departement {
    private Integer id;
    private  String name;
}

Employee.java

public class Employee {
    private List<Departement> depts;
}

UserController.java

    @RequestMapping(value = "/checkboxForm2",method = RequestMethod.GET)
    public String checkboxesForm(Model model){
        Employee employee=new Employee();
        Departement departement=new Departement(1,"开发部");
        List<Departement> list=new ArrayList<>();
        list.add(departement);
        employee.setDepts(list);
        //页面展现的可供选择的复选框内容deptList
        List<Departement> deptList=new ArrayList<>();
        deptList.add(departement);
        deptList.add(new Departement(2,"销售部"));
        deptList.add(new Departement(3,"财务部"));
        model.addAttribute("employee",employee);
        model.addAttribute("deptList",deptList);
        return "checkboxForm2";
    }

checkboxForm2.jsp

<form:form modelAttribute="employee" method="post" action="checkboxForm2">
    <form:checkboxes path="depts" items="${deptList}" itemLabel="name" itemValue="id"/>
</form:form>

8.radiobutton标签

  • 会被渲染为一个类型为radio的普通HTML input标签

StudentController.java

    @RequestMapping(value = "/radiobuttonFrom",method = RequestMethod.GET)
    public String radiobuttonForm(Model model){
        Student s=new Student("男");
        model.addAttribute("student",s);
        return "radiobuttonForm";
    }

Student.java

public class Student {
    private String sex;
}

radiobuttonForm.jsp

<form:form action="radiobuttionForm" method="post" modelAttribute="student">
    <form:radiobutton path="sex" value="男"/>男<br/>
    <form:radiobutton path="sex" value="女"/>女
</form:form>

9.select、option、options标签

public class User {
    //部门编号
    private Integer deptId;
}

UserController.java

    @RequestMapping(value = "/selectForm",method = RequestMethod.GET)
    public  String selectForm(Model model){
        User user=new User(2);
        model.addAttribute("user",user);
        //页面展现的可供选择的select下拉框内容
        Map<Integer,String> deptMap=new HashMap();
        deptMap.put(1,"开发部");
        deptMap.put(2,"销售部");
        deptMap.put(3,"财务部");
        model.addAttribute("deptMap",deptMap);
        return "selectForm";
    }

selectForm.jsp

<form:form modelAttribute="user" method="post" action="selectForm">
    <!-- items属性可以自动加载后台传递过来的数据 -->
    <%--部门:<form:select path="deptId" items="${deptMap}"></form:select>--%>
    <!-- 若没有自动加载,可以使用option属性手动添加 -->
    部门:<form:select path="deptId">
            <form:option value="1">开发部</form:option>
            <form:option value="2">财务部</form:option>
            <form:option value="3">销售部</form:option>
        </form:select>
</form:form>

10.errors标签

  • <form:errors path= “ *” /> :显示表单所有的错误

  • <form:errors path= “ user*” /> :显示所有以 user 为前缀的属性对应的错误

  • <form:errors path= “ username” /> :显示特定表单对象属性的错误

 

10-04 15:48