springmvc04——数据绑定

数据绑定

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

猜你喜欢

转载自blog.csdn.net/qq_37989076/article/details/88570541