springMVC中controller的传参的几种方法
- 使用原生的Servlet API 作为Controller 方法的参数
- 使用model传值向前台传值
- 使用@RequestParam 绑定请求参数参数值
- 直接将请求参数名作为Controller中方法的形参
- 利用类和model绑定请求参数参数值
- 使用Pojo对象(就是封装的类,类中封装的字段作为参数)绑定请求参数值,原理是利用Set的页面反射机制找到LoginModel对象中的属性
首先我们要有一个名为test1的jsp文件
使用原生的Servlet API 作为Controller 方法的参数
@Controller
@RequestMapping("test")//一般在最开始加上这句话,若加上,在访问某个页面时则需要在url上加上test/某个页面;若不加,在访问某个页面时直接访问就行;
public class TestControl{
@RequestMapping("index")
public String index(HttpServletRequest request){
String account = request.getParameter("account");
request.setAttribute("msg","笨蛋");
return "test1";
}
}
使用model传值向前台传值
注意只写model是无法取出前台的参数的
利用model的addAttribute()方法即可将服务器的值传递到jsp页面中
@Controller
@RequestMapping("test")
public class TestControl{
@RequestMapping("index1")
public String index1(Model model){
model.addAttribute("msg","ZHAO");
return "test1";
}
}
使用@RequestParam 绑定请求参数参数值
@RequestMapping("index2")
public String index2(Model model, @RequestParam(value = "account") String account,@RequestParam(value = "pwd",required = false) String pwd){//参数这么写,后面的String名称不要求和前台form表单里的name相同
//加上required = false,那么参数可以不传值,若不写,就必须传值否则就会报错
System.out.println(account);
System.out.println(pwd);
model.addAttribute("account",account);
model.addAttribute("pwd",pwd);
return "test1";
}
直接将请求参数名作为Controller中方法的形参
@RequestMapping("index3")
public String index3(Model model,String account,String pwd){//参数这么写,要求参数名字和前台form表单里的name值是一样的
System.out.println(account);
System.out.println(pwd);
model.addAttribute("account",account);
model.addAttribute("pwd",pwd);
return "test1";
}
利用类和model绑定请求参数参数值
在这里我们需要创建一个LoginModel类
如下:
注意类里的get,set方法一定要写,要不然后台无法拿到数据,后台也无法将数据返回到前台
public class LoginModel {
private String account;
private String pwd;
@Override
public String toString() {
return "LoginModel{" +
"account='" + account + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
public void setAccount(String account) {
this.account = account;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getAccount() {
return account;
}
public String getPwd() {
return pwd;
}
}
接下来就可以正式传参了
@RequestMapping("index4")
public String index4(Model model, LoginModel loginModel){//类的属性名字要和form表单里的name一样才能绑定数据
System.out.println(loginModel.getAccount());
System.out.println(loginModel.getPwd());
model.addAttribute("account",loginModel.getAccount());
model.addAttribute("pwd",loginModel.getPwd());
return "test1";
}
使用Pojo对象(就是封装的类,类中封装的字段作为参数)绑定请求参数值,原理是利用Set的页面反射机制找到LoginModel对象中的属性
这里我们使用上一个方法的LoginModel类
@ResponseBody//不加它就是实现的页面跳转,加上它就是返回数据
@RequestMapping("index5")
public LoginModel index5(LoginModel loginModel){//类的属性名字要和form表单里的name一样才能绑定数据
System.out.println(loginModel.getAccount());
System.out.println(loginModel.getPwd());
return loginModel;//返回的是json字符串,注意要写类里的toString()方法,这样才能成功返回json字符串
}