SpringMVC的form标签
搭建好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运行出现
点注册时:
说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~
还没有评论,来说两句吧...