数据绑定
1、默认支持的HttpServletRequest HttpServletResponse Model
2、java简单类型的 int、String、double、boolean…
当请求的参数名和处理器方法的形参名字一致时会进行数据的绑定
3、pojo
在页面访问,会在控制台输出
package com.cbb.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@RequestMapping("three")
@Controller
public class ThreeController {
/**
* 方法描述:简单类型的数据绑定,名字要一致,类型要匹配
* @param name
* @param pwd
* @return
*/
@RequestMapping("hello01")
public String hello01(String name,int pwd) {
System.err.println("name is :" + name);
System.err.println("pwd is :"+ pwd);
return "user";
}
}
正确的请求
必须要传的类型相同,名字一致,个数相同。
出错了就会这样(个数不同)
对参数进行选择,不出现上面那么严格的要求,可以使用@RequestParam
他共有三个参数
/**
* 方法描述:简单类型的数据绑定,名字要一致,类型要匹配
* @requestpParam: value:当前形参绑定的参数
* requirde:boolean类型的值,,当前参数是否必须的,默认的是true,可以修改为false
* defaultValue:默认值
* @param name
* @param pwd
* @return
*/
@RequestMapping("hello01")
public String hello01(@RequestParam(value="username",required=true,defaultValue="root")String name,int pwd) {
System.err.println("name is :" + name);
System.err.println("pwd is :"+ pwd);
return "user";
}
这样就可以根据选择设计了
如果参数过多,我们可以使用对象进行接收,也就是使用po对象
我们之前没有进行设计pojo,所以先设计一个pojo
这是User类
package com.cbb.pojo;
public class User {
private String user;
private String pwd;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [user=" + user + ", pwd=" + pwd + "]";
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String user, String pwd) {
super();
this.user = user;
this.pwd = pwd;
}
}
编写简单的post请求(jsp页面),在webContent下面(WEB-INF是受保护的,不能直接被访问,只能通过servlet被访问
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action = "${pageContext.request.contextPath }/three/login.do" method="post">
用户名:<input type = "text" name="user" ><br/>
密码:<input type = "text" name = "pwd"><br/>
<button type="submit">登录</button>
</form>
</body>
</html>
编写试验方法
/**
* 方法描述:po类型数据绑定 po对象的属性名和form表单提交的数据名字一致,po对象的属性要有对应的set方法
* @param user对象
*/
@RequestMapping(value="login",method=RequestMethod.POST)
public String login(User user) {
System.err.println(user.toString());
return "user";
}
如果名字不一致,会获取不到。不会报错
如果输入汉字,会有编码问题。所以可以加载一个过滤器。
spring已经给我们了过滤器,我们可以拿过来使用。
<filter>
<filter-name>EncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里“/*”没问题,以前有错是这种方式会连jsp也拦截之类的,反正就是不能正确运行
放在<web-app></web-app>
里面
如上面所说
po类型数据绑定 po对象的属性名和form表单提交的数据名字一致,po对象的属性要有对应的set方法
有了po对象,我们还可以使用一个数组对象来实现
先加一个表单在里面
<form action="${pageContext.request.contextPath }/three/delete.do" >
<input type = "checkbox" name = "ids" value="1">jack<br/>
<input type = "checkbox" name = "ids" value="2">rose<br/>
<input type = "checkbox" name = "ids" value="3">Tom<br/>
<button type ="submit">删除</button>
</form>
再写一个执行方法
/**
* 方法描述:集合类型的数据绑定
* @return
*/
@RequestMapping("delete")
public String delete(Integer[] ids) {
System.err.println(ids);
return "user";
}
这就获取到了前台传过来的选中的标签形成的数组,后台接收的时候可以是int类型数组也可以是String类型的。
这就是关于springmvc数据绑定的知识
END