【无标题】

SpringMVC Controller传递数据到Jsp视图
SpringMVC中 Controller传递数据到Jsp视图有三种常用的方法

  1. 使用request传递参数 2. 使用Model传递参数 3. 使用ModelAndView传递参数
    测试: 1、控制器SendParameterController:
    package com.gx.controller;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    import javax.servlet.http.HttpServletRequest;
    import java.util.ArrayList; import java.util.List;
    /** * SpringMVC Controller传递数据到视图 */
    @Controller @RequestMapping("/sendParameter")
    public class SendParameterController {
    @RequestMapping("/index")
    public String index(){
    return “/sendParameter/index”;
    }
    //使用request传递参数
    @RequestMapping("/byRequest")
    public String byRequest(HttpServletRequest request) {
    request.setAttribute(“msg”, “byRequest传递”);
    List listData=new ArrayList<>(); for (int i=1;i<=10;i++){ listData.add(“String值_”+i);
    }
    request.setAttribute(“listData”,listData);
    return “/sendParameter/result”; }
    //使用Model传递参数 @RequestMapping("/byModel")
    public String byModel(Model model) {
    model.addAttribute(“msg”, “byModel传递”);
    List listData=new ArrayList<>(); for (int i=1;i<=10;i++){ listData.add(“String值_”+i);
    }
    model.addAttribute(“listData”,listData);
    return “/sendParameter/result”; }
    //使用ModelAndView传递参数 @RequestMapping("/byModelAndView")
    public ModelAndView byModelAndView() {
    ModelAndView mv =new ModelAndView("/sendParameter/result");
    mv.addObject(“msg”, “byModelAndView传递”);
    List listData=new ArrayList<>(); for (int i=1;i<=10;i++){ listData.add(“String值_”+i); } mv.addObject(“listData”,listData);
    return mv; } }
    2、web/WEB-INF/jsp/sendParameter/index.jsp:

在这里插入图片描述
在这里插入图片描述

3、web/WEB-INF/jsp/sendParameter/result.jsp:
在这里插入图片描述

4、测试:
在这里插入图片描述

@ModelAttribute、@SessionAttributes与 @SessionAttribute
1、@ModelAttribute @ModelAttribute主要有两种用法:
第一种用法:标注在非功能方法上,每次执行方法时都会先执行@ModelAttribute注解的方法 @ModelAttribute注解的方法可以: ①在参数中获取使用Model,HttpServletRequest,HttpServletResponse等 ②也可以正常获取请求的数据 ③可以向Model、HttpServletRequest中添加数据 若该方法有返回值时:自动把返回的数据添加到Modal中,对于此时的Key值有两种情况 ①如果@ModelAttribute没有指定value值,那么添加的key就是类型名称首字母小写 ②如果指定了value值会在①的基础上额外添加一个,key就是指定的值
第二种用法:用在方法的参数上,将注解的参数添加到Model中,Key值有两种情况 ①若@ModelAttribute未指定value值,那么Key值就是类型名称首字母小写 ②若@ModelAttribute指定value值,那么key值就是指定的值
测试: 1、AtModelAttributeController:
package com.gx.controller; import com.gx.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller @RequestMapping("/atModelAttribute")
public class AtModelAttributeController {
/** * 使用@ModelAttribute注解的方法,返回void

  • 在@ModelAttribute注解的方法中也可以
  • 1在参数中获取使用Model,HttpServletRequest,HttpServletResponse等
  • 2也可以正常获取请求的数据
  • 3可以向Model、HttpServletRequest中添加数据 /
    @ModelAttribute
    public void before1(Model model, HttpServletRequest request,User user){
    System.out.println(“before1_执行,user=”+user);
    model.addAttribute(“before1KeyM”,“before1到此一游_model”);
    request.setAttribute(“before1KeyR”,“before1到此一游_request”); }
    /
    * * 使用@ModelAttribute注解的方法,有返回值时和返回void是基本一致,
  • 多了一个功能:* 自动把返回的数据添加到Modal中,
  • ①如果@ModelAttribute没有指定value值,那么添加的key就是类型名称首字母小写
    ②如果指定了value值会在①的基础上额外添加一个,key就是指定的值 / @ModelAttribute(“modelAttributeUser”)
    //@ModelAttribute
    public User before2(Model model, HttpServletRequest request,User user1){
    System.out.println(“before2_执行,user=”+user1);
    model.addAttribute(“before2KeyM”,“before2到此一游_model”);
    request.setAttribute(“before2KeyR”,“before2到此一游_request”);
    user1.setUserName(user1.getUserName()+"_before2"); return user1; }
    /
    * 测试页面 /
    @RequestMapping("/index")
    public String index(){
    return “/atModelAttribute/index”;}
    /
    * * 结果显示页面
  • 如果@ModelAttribute注解在参数上的使用,作用如下:
  • 将注解的参数添加到Model中,Key值有两种情况
  • ①若@ModelAttribute未指定value值,那么Key值就是类型名称首字母小写
    *②若@ModelAttribute指定value值,那么key值就是指定的值 */
    @RequestMapping("/result")
    public ModelAndView result(@ModelAttribute(“myUser”) User myUser){
    System.out.println(“result执行__myUser=”+myUser);
    ModelAndView mv=new ModelAndView("/atModelAttribute/result"); return mv; } }
    2、web/WEB-INF/jsp/atModelAttribute/index.jsp:
    在这里插入图片描述

3、web/WEB-INF/jsp/sendParameter/result.jsp:

在这里插入图片描述
在这里插入图片描述

4、测试结果:
在这里插入图片描述

2、@SessionAttributes与@SessionAttribute的使用
spring MVC中有两个长得非常像的注解:@SessionAttributes 和 @SessionAttribute。
@SessionAttributes用于在请求之间的HTTP Servlet会话中存储model属性。 它是类型级别的注解,用 于声明特定控制器使用的会话属性。会筛选该控制器下的所有添加到Model中的数据,将符合筛选条件 的数据自动添加到Session中。
@SessionAttribute 用在方法的形参上,从session中获取指定名称的的数据,并把数据给形参参数。 演示案例: 1、AtSessionAttributeOneController:
package com.gx.controller;
import com.gx.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;
@Controller
@RequestMapping("/atSessionAttribute1")
@SessionAttributes(value = {“loginUser”,“login_user”},types = {User.class})
public class AtSessionAttributeOneController {
/** * 登录页面 / @RequestMapping("/login")
public String login(){ return “/atSessionAttribute/login”; }
/
* * 模拟登录方法 /
@RequestMapping(value = “/doLogin”,produces = “application/json;charset=utf 8”)
@ResponseBody
public User doLogin(Model model,User user){
System.out.println(“doLogin,user=”+user);
if (user.getUserName()!=null && user.getPassword()!=null){
//模拟用户登录 用户名和密码相同就OK
if (user.getUserName().equals(user.getPassword())){
//配置@SessionAttributes(value = {“loginUser”,“login_user”},types = {User.class})注解
//对应添加到Model中,匹配的数据会直接保存到Session中
model.addAttribute(“loginUser”,user);
model.addAttribute(“login_user”,user);
return user; } }
return null; } }
2、AtSessionAttributeTwoController:
package com.gx.controller;
import com.gx.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import javax.servlet.http.HttpSession;
@Controller @RequestMapping("/atSessionAttribute2")
public class AtSessionAttributeTwoController {
/
* * 页面 * -@SessionAttribute从session中获取指定名称的的数据,并把数据给形参参数

  • required属性默认为true,如果获取的数据不存在——400错误 */
    @RequestMapping("/index")
    public String index(@SessionAttribute(“loginUser”)User loginUser, @SessionAttribute(“login_user”) User login_user, HttpSession session){
    System.out.println(“index;loginUser=”+loginUser);
    System.out.println(“index;login_user=”+login_user);
    User session_loginUser= (User) session.getAttribute(“loginUser”);
    User session_login_user= (User) session.getAttribute(“login_user”);
    System.out.println(“index;session_loginUser=”+session_loginUser);
    System.out.println(“index;session_loginUser=”+session_loginUser);
    return “/atSessionAttribute/index”; } }
    3、web/WEB-INF/jsp/atSessionAttribute/login.jsp:
    在这里插入图片描述
    在这里插入图片描述

4、web/WEB-INF/jsp/atSessionAttribute/index.jsp:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值