spring mvc controller跳转及传值

作者: walk_and_walk | 来源:发表于2016-10-10 18:11 被阅读1807次

    标签:SpringMVC 页面跳转 参数传递

    spring接收请求参数:

    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")  
    public String login(HttpServletRequest request, String name,  
       @RequestParam("pass")String password) { // 表单属性是pass,用变量password接收
       syso(name);  
       syso(password)  
    }
    

    3,自动注入Bean属性

    <!--jsp-->
    <form action="login">  
        用户名:<input name="name"/>  
        密码:<input name="pass"/>  
        <input type="submit" value="登陆">  
    </form>  
    
    //封装的User类  
    public class User{  
      private String name;  
      private String pass;  
    } 
    
    @RequestMapping("/login")  
    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")  
    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中
    ModelMap对象的 addAttribute,put两个方法有什么区别就是 addAttribute是不允许添加空值的key,put是允许的。

    @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 contorller跳转到另一个controller并传值

    示例均从createOrderForOld跳转到createOrder

    1: forward 请求转发
    @RequestMapping(value ="/createOrderForOld")
    public String createOrder(HttpServletRequest request,ModelMapmodel) {
    return"forward:/createOrder";
    }  
     @RequestMapping(value ="/createOrder")
        public String createOrder(String oderId,String orderName,ModelMap model) {
        return"index;
    }
    

    forward跳转,是请求转发,参数自动跳转,所以当http://localhost:8080/my-app/createOrderForOld?orderId=123 该链接请求createOrderForOld接口后 请求转发到createOrder接口时,参数自动带过来了,createOrder中oderId自动赋值为“123”,参数名称需一致,否则无法传参赋值。

    2: redirect 重定向
    @RequestMapping(value ="/createOrderForOld")
    public String createOrder(HttpServletRequestrequest,ModelMap model) {
        model.put("orderName","newOld");
        return"redirect:/createOrder?orderId=123";
    }
           
    @RequestMapping(value ="/createOrder")
    public String createOrder(String oderId,String orderName,ModelMap model) {
        return"index";
    }
    

    当请求http://localhost:8080/my-app/createOrderForOld
    链接请求createOrderForOld接口后 请求重定向到createOrder接口时,通过model.put方法 ,createOrder中oderName自动赋值为“newOld”,通过参数拼接orderId自动赋值为“123”。
    故redirect跳转到另一个controller是通过model还是拼接url均可。参数名称需一致,否则无法传参赋值。

    [1][spring mvc controller跳转及传值]

    相关文章

      网友评论

        本文标题:spring mvc controller跳转及传值

        本文链接:https://www.haomeiwen.com/subject/plrvyttx.html