欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

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

发布时间:2025/3/11 c/c++ 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 springmvc在controller和视图之间传递参数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

从视图向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,使用RedirectView

    2,使用redirect:前缀

    Java代码  
  • public ModelAndView login(){  
  •    RedirectView view = new RedirectView("regirst.do");  
  •    return new ModelAndView(view);  
  • }  
  •    或者用如下方法,工作中常用的方法:

    Java代码  
  • public String login(){  
  •     //TODO  
  •     return "redirect:regirst.do";  
  • }  
  •  



    总结

    以上是生活随笔为你收集整理的springmvc在controller和视图之间传递参数的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。