1.知识讲解: 网页传入:username=123&password=123 mvc框架:
2.参数绑定与自定义参数类型转换:
表单提交的任何数据类型全部都是字符串类型,但是后台定义Integer类型,数据也可以封装上,说明 Spring框架内部会默认进行数据类型转换。
如果想自定义数据类型转换,可以实现Converter的接口
请求参数的绑定说明
绑定机制
表单提交的数据都是k=v格式的 username=haha&password=123
SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
要求:提交表单的name和参数的名称是相同的
支持的数据类型
基本数据类型和字符串类型
实体类型(JavaBean)
集合数据类型(List、map集合等)
基本数据类型和字符串类型
提交表单的name和参数的名称是相同的
区分大小写
page.jsp 代码 1。例如跳转的是 param/saveAccount
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="param/saveAccount"> 姓名:<input type="text" name="username"/><br> 密码:<input type="password" name="password"/><br> 金额:<input type="text" name="money"/><br> 用户姓名:<input type="text" name="user.uname"><br> 用户年龄:<input type="text" name="user.age"><br> <input type="submit" value="提交"> </body> </html>对java的bean要求封装: User.java
package cn.xiaosi.domain; import javax.xml.crypto.Data; import java.io.Serializable; import java.util.Date; public class User implements Serializable { private String uname; private Integer age; private Date date; public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } @Override public String toString() { return "User{" + "uname='" + uname + '\'' + ", age=" + age + ", date=" + date + '}'; } }Account.java
package cn.xiaosi.domain; import java.io.Serializable; public class Account implements Serializable { private String username; private String password; private Double money; private User user; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Double getMoney() { return money; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public void setMoney(Double money) { this.money = money; } @Override public String toString() { return "Account{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", money=" + money + ", user=" + user + '}'; } }控制器映射:
import cn.xiaosi.domain.Account; import cn.xiaosi.domain.User; import com.sun.org.apache.xpath.internal.SourceTree; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; //控制器 @Controller @RequestMapping("/param") public class ParamController { //把数据封装导javabean中 @RequestMapping("/saveAccount") public String testParam(Account account){ System.out.println("参数绑定"); System.out.println(account); return "success"; } }但是需要有seccess.jsp作为跳转:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> 成功了 </body> </html>1.对java的bean还是上面那两个: 2.自定义的类型转换器,从String转为Date(实现org.springframework.core.convert.converter.Converter接口):
package cn.xiaosi.utils; import org.springframework.core.convert.converter.Converter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class StringToDataConverter implements Converter<String ,Date> { /** * * @param * @return */ @Override public Date convert(String source) { //判断 if(source == null){ throw new RuntimeException("请传入数据"); } DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { //把日期转换为: Date date = dateFormat.parse(source); return date; }catch (Exception e){ throw new RuntimeException("请传入数据"); } } }3.定义完之后进行加载(在springmvc.xml文件中进行加载) 可以自己中文拦截,以防止他的中文乱码: 在web.xml中添加:
<!-- 配置中文乱码的过滤器--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>enconding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <!--拦截所有乱码问题--> <url-pattern>/*</url-pattern> </filter-mapping>param.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="param/saveUser" method="post"> 用户姓名:<input type="text" name="uname"><br> 用户年龄:<input type="text" name="age"><br> 用户生日:<<input type="text" name="date"> <input type="submit" value="提交"> </form> </body> </html>控制跳转:
import cn.xiaosi.domain.Account; import cn.xiaosi.domain.User; import com.sun.org.apache.xpath.internal.SourceTree; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; //控制器 @Controller @RequestMapping("/param") public class ParamController { //自定义类型转换器 @RequestMapping("/saveUser") public String saveUser(User user){ System.out.println("自定义类型转换器"); System.out.println(user); return "success"; } }效果: