您的位置:首页 > 编程语言 > Java开发

springmvc在controller和视图之间传递参数

2016-07-14 10:44 519 查看
 从视图向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但经测试也可以完全不写这些注解,即方法的参数写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注解为@RequestMapping(value="/hello4",method=RequestMethod.POST) 最后,注意,如果这里提交过来的字符出现乱码,应该在web.xml里加入如下filter: 
<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获取Java代码  @RequestMapping("/login.do")  public String login(HttpServletRequest request){      String name = request.getParameter("name")      String pass = request.getParameter("pass")  }   2,Spring会自动将表单参数注入到方法参数,和表单的name属性保持一致。和Struts2一样Java代码  @RequestMapping("/login.do")  public String login(HttpServletRequest request,                                  String name,   @RequestParam("pass")String password) // 表单属性是pass,用变量password接收  {     syso(name);     syso(password)  }   3,自动注入Bean属性  Java代码  <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;  }   Java代码  @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中Java代码  @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中Java代码  @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中Java代码  @RequestMapping("/login.do")  public String login(@ModelAttribute("user") User user){      //TODO     return "success";  }    @ModelAttribute("name")  public String getName(){      return name;  }   Session存储:可以利用HttpServletReequest的getSession()方法Java代码  @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,使用RedirectView2,使用redirect:前缀Java代码  public ModelAndView login(){     RedirectView view = new RedirectView("regirst.do");     return new ModelAndView(view);  }     或者用如下方法,工作中常用的方法:Java代码  public String login(){      //TODO      return "redirect:regirst.do";  }   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: