View到Controller值的传递方法大概有四种,一种是通过
1、@RequestParam绑定单个请求参数值
2、@PathVariable绑定URI模板变量值
3、@ModelAttribute注入对象
4、获取 到HttpServletRequest对象,然后获取数据类容
基于@RequestParam的方式
1、不带@RequestParam注解的方式
这种直接注入参数的方式中,没有任何的注解,只是默认走的还是RequestParam,都是RequestParam的默认值
/**
* 这个方式是通过原始get请求 方式
* http://127.0.0.1/day11_13/demo/login2?username=yellowcong&password=test
* @param username
* @param password
* @return
*/
@RequestMapping(value= "/login",method=RequestMethod.GET)
public ModelAndView login(String username,String password){
ModelAndView view = new ModelAndView("demo/login");
view.addObject("username", username);
view.addObject("password", password);
return view;
}
2、直接注入User对象
直接注入User对象,这种方式也是走的是RequestParam
/**
* 注入对象的方式
* http://127.0.0.1/day11_13/demo/login2?username=yellowcong&password=test
* @param user
* @return
*/
@RequestMapping(value= "/login2",method=RequestMethod.GET)
public ModelAndView login2(User user){
ModelAndView view = new ModelAndView("demo/login");
view.addObject("username", user.getUsername());
view.addObject("password", user.getPassword());
return view;
}
3、使用注解的方式
使用注解的方式中,需要了解@RequestParam注解中,各个参数的特点
/**
* @RequestParam 可以用来解决参数传递
* name 传递过来的字段名称(前台字段和后天字段 不一样,可以用这个解决)
* required 是否是必须的
* defaultValue 设置默认值
* @param username
* @param password
* @return
*/
@RequestMapping(value= "/login4",method=RequestMethod.GET)
public ModelAndView login4(
@RequestParam(name="name",required=false,defaultValue="dou")String username,
@RequestParam(name="pass",required=false,defaultValue="bi")String password){
ModelAndView view = new ModelAndView("demo/login");
view.addObject("username", username);
view.addObject("password", password);
return view;
}
走默认值
传递参数,这个参数的字段名,和后天的字段名称不一样,这事通过RequestMapping 来解决的
基于@PathVariable的方式
这种方式是REST的风格的,现在用得是比较的多
/**
* url的请求方式变成了(这种请求的方式现在用得比较的多)
* http://127.0.0.1/day11_13/demo/login3/yellowcong/doubi
* @param username
* @param pathword
* @return
*/
@RequestMapping(value= "/login3/{username}/{password}",method=RequestMethod.GET)
public ModelAndView login3(@PathVariable String username,@PathVariable String password){
ModelAndView view = new ModelAndView("demo/login");
view.addObject("username", username);
view.addObject("password", password);
return view;
}
基于@ModelAttribute 的方式
1、直接基于GET请求
/**
* 注入对象的方式
* http://127.0.0.1/day11_13/demo/login5?user.username=yellowcong&user.password=test
* @param user
* @return
*/
@RequestMapping(value= "/login5",method=RequestMethod.GET)
public ModelAndView login5(@ModelAttribute("user") User user){
ModelAndView view = new ModelAndView("demo/login");
view.addObject("username", user.getUsername());
view.addObject("password", user.getPassword());
return view;
}
这个访问,感觉和RequestParam的方式有些类似,感觉都是相同的方式
2、POST提交方式(表单提交)
这中方式需要解决Springmvc的标签
/**
* 注入对象的方式
* @param user
* @return
*/
@RequestMapping(value= "/login6",method=RequestMethod.GET)
public ModelAndView login6(@ModelAttribute("user") User user){
ModelAndView view = new ModelAndView("demo/login");
view.addObject("username", user.getUsername());
view.addObject("password", user.getPassword());
return view;
}
前台代码
我们可以通过EL表达式来获取到 request中的数据${user.username}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>
<html>
<head>
<title>xx文章</title>
</head>
<body>
<!-- ${user.username} 这个访问了 用户model里面的属性 -->
<h2>${user.username} --${username} -${password}</h2>
<sf:form method="get" modelAttribute="user" action="${pageContext.servletContext.contextPath}/demo/login6">
用户名:<sf:input path="username"/><sf:errors path="username"></sf:errors><br/>
别名:<sf:input path="password"/><sf:errors path="password"/><br/>
<input type="submit" value="提交用户"/>
</sf:form>
</body>
</html>