?
從視圖向controller傳遞值, ?controller <--- 視圖
?1)簡單類型,如int, String, 應在變量名前加@RequestParam注解,
例如:
@RequestMapping("hello3")public String hello3( @RequestParam("name" ) String name,@RequestParam("hobby" ) String hobby){System. out.println("name=" +name);System. out.println("hobby=" +hobby); return "hello" ;}
但這樣就要求輸入里面必須有這兩個參數了,可以用required=false來取消,例如:
@RequestParam(value="name",required=false) String name
?
2)對象類型:
@RequestMapping("/hello4" )public String hello4(User user){System.out.println("user.getName()=" +user.getName());System.out.println("user.getHobby()=" +user.getHobby());return "hello";}
?
Spring MVC會按:
? ? ?“HTTP請求參數名= ?命令/表單對象的屬性名”
? ? 的規則自動綁定請求數據,支持“級聯屬性名”,自動進行基本類型數據轉換。
?
即有一個User類,如下
package model;public class User {private String name ;private String hobby ;public User(){}public User(String name, String hobby) {this.name = name;this.hobby = hobby;}
//...get/set方法略
?
則頁面上可以用
<form name="form1" action="hello4" method="post"><input type="text" name="name"/><input type="text" name="hobby"/>
...
提交后,把值直接綁定到user對象上。
?
此外,還可以限定提交方法為POST,即修改方法的@RequestMapping注解為
?
?
<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter </filter-class><init-param><param-name>encoding</param-name><param-value>utf8</param-value></init-param>
</filter><filter-mapping><filter-name>encodingFilter</filter-name ><url-pattern>/*</url-pattern>
</filter-mapping>
-----------------------以下轉載-----------
1,使用HttpServletRequest獲取
- @RequestMapping("/login.do")??
- public?String?login(HttpServletRequest?request){??
- ????String?name?=?request.getParameter("name")??
- ????String?pass?=?request.getParameter("pass")??
- }??
?2,Spring會自動將表單參數注入到方法參數,和表單的name屬性保持一致。和Struts2一樣
- @RequestMapping("/login.do")??
- public?String?login(HttpServletRequest?request,??
- ????????????????????????????????String?name,??
- ?@RequestParam("pass")String?password)?//?表單屬性是pass,用變量password接收??
- {??
- ???syso(name);??
- ???syso(password)??
- }??
?
3,自動注入Bean屬性
??
- <form?action="login.do">??
- 用戶名:<input?name="name"/>??
- 密碼:<input?name="pass"/>??
- <input?type="submit"?value="登陸">??
- </form>??
- ??
- //封裝的User類??
- public?class?User{??
- ??private?String?name;??
- ??private?String?pass;??
- }??
?
- @RequestMapping("/login.do")??
- public?String?login(User?user)??
- {??
- ???syso(user.getName());??
- ???syso(user.getPass());??
- }??
?
向頁面傳值:
當Controller組件處理后,向jsp頁面傳值,
1,使用HttpServletRequest 和 Session ?然后setAttribute(),就和Servlet中一樣
2,使用ModelAndView對象
3,使用ModelMap對象
4,使用@ModelAttribute注解
?
Model數據會利用HttpServletRequest的Attribute傳值到success.jsp中
- @RequestMapping("/login.do")??
- public?ModelAndView??login(String?name,String?pass){??
- ????User?user?=?userService.login(name,pwd);??
- ????Map<String,Object>?data?=?new?HashMap<String,Object>();??
- ????data.put("user",user);??
- ????return?new?ModelAndView("success",data);??
- }??
?
使用ModelMap參數對象示例:
ModelMap數據會利用HttpServletRequest的Attribute傳值到success.jsp中
- @RequestMapping("/login.do")??
- public String?login(String?name,String?pass?,ModelMap?model){??
- ????User?user??=?userService.login(name,pwd);??
- ????model.addAttribute("user",user);??
- ????model.put("name",name);??
- ????return?"success";??
- }??
?
?使用@ModelAttribute示例
在Controller方法的參數部分或Bean屬性方法上使用
@ModelAttribute數據會利用HttpServletRequest的Attribute傳值到success.jsp中
- @RequestMapping("/login.do")??
- public?String?login(@ModelAttribute("user")?User?user){??
- ????//TODO??
- ???return?"success";??
- }??
- ??
- @ModelAttribute("name")??
- public?String?getName(){??
- ????return?name;??
- }??
?
Session存儲:
可以利用HttpServletReequest的getSession()方法
- @RequestMapping("/login.do")??
- public?String?login(String?name,String?pwd??
- ????????????????????????????ModelMap?model,HttpServletRequest?request){??
- ?????User?user?=?serService.login(name,pwd);??
- ?????HttpSession?session?=?request.getSession();??
- ?????session.setAttribute("user",user);??
- ?????model.addAttribute("user",user);??
- ?????return?"success";??
- }??
?
Spring MVC 默認采用的是轉發來定位視圖,如果要使用重定向,可以如下操作
1,使用RedirectView
2,使用redirect:前綴
- public?ModelAndView?login(){??
- ???RedirectView?view?=?new?RedirectView("regirst.do");??
- ???return?new?ModelAndView(view);??
- }??
? ?或者用如下方法,工作中常用的方法:
- public?String?login(){??
- ????//TODO??
- ????return?"redirect:regirst.do";??
- }??
?