SpringMVC的form标签

版权声明:本文为博主原创文章,版权归原作者小思所有,转载或者引用本文内容请注明来源及原作者 https://blog.csdn.net/zeal9s/article/details/83720134

搭建好SpringMVC的环境
项目模块图
在这里插入图片描述
pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringMVC</artifactId>
        <groupId>SpringMVC</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>SpringMVC_04</groupId>
    <artifactId>SpringMVC_04</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>SpringMVC_04 Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--引入SpringMVC依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>SpringMVC_04</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.7.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

spingmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置注解扫描器-->
    <context:component-scan base-package="com.zs.controller"></context:component-scan>

    <!--配置内部的视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>


</beans>

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>

  <display-name>Archetype Created Web Application</display-name>

  <!-- 解决工程编码过滤器(中文乱码问题)-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>

  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


  <!--spring的核心servlet-->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--初始化参数,将springmvc的核心配置文件springmvc.xml初始化-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spingmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>




</web-app>

index.jsp

<%--
 @Name: index
 @Description: 
 @author 小思
 @date 2018/11/4 16:18
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
index
</body>
</html>

各个标签的普通使用

Users.java

package com.zs.model;

import java.util.Arrays;

/**
 * @author 小思
 * @PackageName:com.zs.model
 * @ClassName: Users
 * @Description:页面收集与传递数据的实体类
 * @date 2018/11/4 16:11
 */
public class Users {
    private Integer id;//用户Id
    private String uname;//用户姓名
    private String upwd;//用户密码
    private String usex;//用户性别
    private String[] hobby;//用户爱好
    private String city;//居住地址
    private boolean marry;//婚姻状况
    private String comment;//备注


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpwd() {
        return upwd;
    }

    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }

    public String getUsex() {
        return usex;
    }

    public void setUsex(String usex) {
        this.usex = usex;
    }

    public String[] getHobby() {
        return hobby;
    }

    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public boolean isMarry() {
        return marry;
    }

    public void setMarry(boolean marry) {
        this.marry = marry;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    @Override
    public String toString() {
        return "Users{" +
                "id=" + id +
                ", uname='" + uname + '\'' +
                ", upwd='" + upwd + '\'' +
                ", usex='" + usex + '\'' +
                ", hobby=" + Arrays.toString(hobby) +
                ", city='" + city + '\'' +
                ", marry=" + marry +
                ", comment='" + comment + '\'' +
                '}';
    }
}

MainController.java

package com.zs.controller;

import com.sun.xml.internal.ws.api.databinding.Databinding;
import com.zs.model.Student;
import com.zs.model.TestModel;
import com.zs.model.Users;
import com.zs.validator.StudentValidator;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.DataBinder;
import org.springframework.validation.Errors;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 小思
 * @PackageName:com.zs.controller
 * @ClassName: MainController
 * @Description:收集与传递数据方法
 * @date 2018/11/4 16:10
 */
@Controller
public class MainController {
    /**
     * @Author 小思
     * @Description 测试使用modelAttribute单纯的给对象设置值
     * @Date 2018/11/4 18:42
     * @Param [modelMap]
     * @return java.lang.String
     **/
    @RequestMapping("test1")
    public String test1(ModelMap modelMap){
        Users u=new Users();
        u.setId(1);
        u.setUname("李四");
        u.setUpwd("123456");
        u.setUsex("男");
        String[] hobby=new String[]{"阅读","观影"};
        u.setHobby(hobby);
        u.setCity("邵阳");
        u.setMarry(true);
        u.setComment("此用户是vip客户,于2016年注册");
        modelMap.addAttribute("users",u);
        return "myTest1";
    }

    //获取myTest1.jsp页面上的值
    @RequestMapping("test4")
    public  String test4(Users users){
        System.out.println(users);
        return "index";
    }

}

myTest1.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
 @Name: test
 @Description: 
 @author 小思
 @date 2018/11/4 16:18
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试页面传输与接收数据</title>
</head>
<body>
<%--测试form标签获取值与传递值--%>
<%--modelAttribute="users"uses是注解里面对象的名称
    path="uname"对应对象中的属性
 --%>
<form:form action="/test4.action" method="post" modelAttribute="users">
    <%--测试使用modelAttribute单纯的给对象设置值--%>
    <%--用户id--%><form:hidden path="id"></form:hidden><br>
    用户姓名:<form:input path="uname"></form:input><br>
    用户密码:<form:password path="upwd"></form:password><br>
    用户性别: <form:radiobutton path="usex" value="" label=""></form:radiobutton>
              <form:radiobutton path="usex" value="" label=""></form:radiobutton><br>
    用户爱好:<form:checkbox path="hobby" value="阅读" label="阅读"></form:checkbox>
            <form:checkbox path="hobby" value="观影" label="观影"></form:checkbox>
            <form:checkbox path="hobby" value="旅游" label="旅游"></form:checkbox>
            <form:checkbox path="hobby" value="运动" label="运动"></form:checkbox><br>
    居住地址:<form:select path="city">
                 <form:option value="长沙" label="长沙"></form:option>
                 <form:option value="衡阳" label="衡阳"></form:option>
                 <form:option value="常德" label="常德"></form:option>
                 <form:option value="邵阳" label="邵阳"></form:option>
                 <form:option value="祁阳" label="祁阳"></form:option>
                 <form:option value="张家界" label="张家界"></form:option>
             </form:select><br>
    用户婚姻状态:<form:checkbox path="marry"></form:checkbox><br>
    备注:<form:textarea path="comment"></form:textarea><br>
    <input type="submit" value="修改">

</form:form>
</body>
</html>

重新发布项目,在浏览器输入http://localhost:8080/test1.action运行出现
在这里插入图片描述
点击修改,后台获取数据
在这里插入图片描述

个别标签的高级使用

TestModel.java

package com.zs.model;

/**
 * @author 小思
 * @PackageName:com.zs.model
 * @ClassName: TestModel
 * @Description:测试的实体类
 * @date 2018/11/4 18:52
 */
public class TestModel {
    private String[] hobby;

    private Integer cid;
    private String city;


    public String[] getHobby() {
        return hobby;
    }

    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

myTest2.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
 @Name: success
 @Description: 
 @author 小思
 @date 2018/11/4 16:18
--%>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>

<html>
<head>
    <title>测试后台向前端传递集合数据给form标签接收</title>
</head>
<body>
<%--测试后台向前端传递集合数据给form标签接收--%>
<form:form action="/test3.action" method="post" modelAttribute="tm">
    爱好: <form:checkboxes path="hobby" items="${hobbys}"></form:checkboxes><br>
    地址: <form:select path="cid" items="${cities}"></form:select>
    <input type="submit" value="提交">
</form:form>
</body>
</html>

MainController.java

    package com.zs.controller;

    import com.sun.xml.internal.ws.api.databinding.Databinding;
    import com.zs.model.Student;
    import com.zs.model.TestModel;
    import com.zs.model.Users;
    import com.zs.validator.StudentValidator;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.validation.DataBinder;
    import org.springframework.validation.Errors;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    /**
     * @author 小思
     * @PackageName:com.zs.controller
     * @ClassName: MainController
     * @Description:收集与传递数据方法
     * @date 2018/11/4 16:10
     */
    @Controller
    public class MainController {
       
        @RequestMapping("test2")
        public String test2(ModelMap modelMap){
            //设置页面总共拥有的爱好
            List<String> hobbys=new ArrayList<>();
            hobbys.add("篮球");
            hobbys.add("足球");
            hobbys.add("排球");
            hobbys.add("羽毛球");
            //用户拥有的爱好
            TestModel tm=new TestModel();
            tm.setHobby(new String[]{"足球","羽毛球"});
            //设置页面默认会出现的城市
            Map<Integer,String> cities=new HashMap<>();
            cities.put(1,"衡阳");
            cities.put(2,"株洲");
            cities.put(3,"长沙");
            cities.put(4,"常德");
            //设置用户所在的城市
            tm.setCid(3);
            modelMap.addAttribute("cities",cities);
            modelMap.addAttribute("hobbys",hobbys);
            modelMap.addAttribute("tm",tm);
            return "myTest2";
        }


        //获取myTest2.jsp页面上的值
        @RequestMapping("test3")
        public String test3(TestModel testModel){
            System.out.println("爱好:");
            for (String s : testModel.getHobby()) {
                System.out.println(s+"    ");
            }
            System.out.println("cid="+testModel.getCid());
            return "index";
        }
        
    }

重新发布项目,在浏览器输入http://localhost:8080/test2.action运行出现
在这里插入图片描述
点击提交,控制台出现
在这里插入图片描述

form表单的errors标签的使用

Student.java

package com.zs.model;

import java.io.Serializable;

/**
 * @author 小思
 * @PackageName:com.zs.model
 * @ClassName: Student
 * @Description:测试error标签的实体类
 * @date 2018/11/4 19:42
 */
public class Student implements Serializable {
    private String sname;
    private String sage;

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSage() {
        return sage;
    }

    public void setSage(String sage) {
        this.sage = sage;
    }
}

StudentValidator.java

package com.zs.validator;

import com.zs.model.Student;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

/**
 * @author 小思
 * @PackageName:com.zs.validator
 * @ClassName: StudentValidator
 * @Description:
 * @date 2018/11/4 19:43
 */
public class StudentValidator implements Validator {
    @Override
    public boolean supports(Class<?> aClass) {
        return Student.class.equals(aClass);
    }

    @Override
    public void validate(Object o, Errors errors) {
        // 验证sname和sage是否为null
        ValidationUtils.rejectIfEmpty(errors,"sname",null,"学生姓名不能为空");
        ValidationUtils.rejectIfEmpty(errors,"sage",null,"学生年龄不能为空");
    }
}

registerForm.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
 @Name: registerForm
 @Description: 
 @author 小思
 @date 2018/11/4 19:40
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>form的error标签的使用</title>
</head>
<body>
<form:form action="/testError.action" method="post" modelAttribute="student">
    学生名字:<form:input path="sname"></form:input><font color="red"><form:errors path="sname"></form:errors></font><br>
    学生年龄:<form:input path="sage"></form:input><font color="red"><form:errors path="sage"></form:errors></font><br>
    <input type="submit" value="注册">
</form:form>
</body>
</html>

MainController.java

    package com.zs.controller;

    import com.sun.xml.internal.ws.api.databinding.Databinding;
    import com.zs.model.Student;
    import com.zs.model.TestModel;
    import com.zs.model.Users;
    import com.zs.validator.StudentValidator;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.validation.DataBinder;
    import org.springframework.validation.Errors;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    /**
     * @author 小思
     * @PackageName:com.zs.controller
     * @ClassName: MainController
     * @Description:收集与传递数据方法
     * @date 2018/11/4 16:10
     */
    @Controller
    public class MainController {
        


       //设置验证的类为StudentValidator
        @InitBinder
        public void InitBinder(DataBinder dataBinder){
            dataBinder.setValidator(new StudentValidator());
        }


        //进入registerForm.jsp之前先访问的方法
        @RequestMapping("/register")
        public String register(ModelMap modelMap){
            Student student=new Student();
            // model中添加属性student,值是Student对象
            modelMap.addAttribute("student",student);
            return "registerForm";
        }


        //验证是否通过
        @RequestMapping("testError")
        public String testError(@Validated Student student, Errors errors){
            //页面出现错误信息,不可以提交数据,返回原页面
            if(errors.hasErrors()){
                return "registerForm";
            }
            //没有错误信息就提交
            else{
                return "index";
            }
        }
    }

重新发布项目,在浏览器输入http://localhost:8080/register.action运行出现
在这里插入图片描述
点注册时:
在这里插入图片描述

说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

猜你喜欢

转载自blog.csdn.net/zeal9s/article/details/83720134