(一)视图向controller中传递参数。
1.普通参数传递(int,String类型),在变量前加@RequestParam注解,也可以不加该注解。在controller中获取方式如下
@RequestMapping(value="/login")
public String login(@RequestParam("username") String username){
System.out.println(username);
return "loginsuccess";
}
2.对象传递,使用注解@ModelAttribute,也可以不加该注解。
对象的定义如下:
package kxd.springmvc.unicom.vo;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
jsp视图中的参数如下:
<form action="/userlogin/login" method="post" >
<table>
<tr>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td><input type="text" name="password"></td>
</tr>
<tr>
<td><input type="submit"></td>
</tr>
</table>
</form>
在controller中获取参数值方式如下:
@RequestMapping(value="/login")
public String login(@ModelAttribute("user") User user){
System.out.println(user.getUsername());
return "loginsuccess";
}
3.通过@PathVariabl注解获取路径中传递参数,实例代码如下:
@RequestMapping(value = "/{id}/{str}")
public ModelAndView helloWorld(@PathVariable String id, @PathVariable String str) {
System.out.println(id);
System.out.println(str);
return new ModelAndView("/helloWorld");
}
4.直接使用HttpServletRequest获取,实例代码如下:
@RequestMapping(value="/login",method = RequestMethod.GET)
public String get(HttpServletRequest request, HttpServletResponse response) {
System.out.println(request.getParameter("username"));
return "helloWorld";
}
(二)controller向视图中传递参数。
1.可以用Map<String, Object>,其键值可以在页面上用EL表达式${键值名}得到,实例代码如下:
@RequestMapping(value="/login")
public String login(Map<String,Object> map){
map.put("name","zhangsan");
map.put("pwd", "000000");
return "loginsuccess";
}
在页面上通过${name}${pwd}取得相应的值。
2.也可以用Model类对象来传递,有addAttribute(key, value)方法,其键值可以在页面上用EL表达式${键值名}得到。如果用addAttribute(value)这个方法,会将类型名的首字母改成小写后,作为键值名传递过去,例如"ok"在页面上用${string}得到,而一个复合类对象,如User类对象,页面上用${user}得到该对象,用${user.propertyName}得到其属性,这是用Model的一大优势。
例如,model.addAttribute(new User("my姓名","000000"));这样页面上就能用${user.username}和${user.password}打印对应属性,实例代码如下:
@RequestMapping(value="/login")
public String say(@RequestParam int id,Model model) {
System.out.println("say");
model.addAttribute("hello", "value");
//使用Object的类型作为key,String-->string
model.addAttribute("ok");
return "hello";
}
3.通过request.setAttribute(key,value)方式,鉴于此方式太为常见,此处不再赘述。
以上每条均经过测试通过,可放心使用。