赞
踩
一、Controller传递数据
有三种实现方案:
第一种:ModelAndView
第二种:Map
第三种:Model接口
①:ModelAndView
- public class DemoController {
-
- @RequestMapping("/edit")
- public ModelAndView edit() {
- User user = new User();
- user.setUsername("张三");
- user.setAge(11);
- user.setPassword("123");
-
- Address address = new Address();
- address.setProvince("辽宁");
- address.setCity("葫芦岛");
-
- user.setAddress(address);
-
- ModelAndView modelAndView = new ModelAndView();
-
- // viewname 指定要查找的页面
- modelAndView.setViewName("user/form");
- // 添加modelAndView添加携带的user数据
- modelAndView.addObject("user", user);
-
- return modelAndView;
- }
- }
页面显示代码:
/WEB-INF/user/form.jsp
- <form action="/spring-mvc-22/user/add" method="post">
- <label for="username">用户名:<input type="text" value="${user.username }" id="username" name="username" /></label><br/>
- <label for="password">密码:<input type="password" id="password" name="password" /></label><br/>
- <label for="age">年龄:<input type="text" value="${user.age }" name="age" /></label><br/>
- <label for="address.province">省份:<input type="text" value="${user.address.province }" name="address.province" /></label><br/>
- <label for="address.city">城市:<input type="text" value="${user.address.city }" name="address.city" /></label><br/>
- <label for="address.sp.pname">特产名称:<input type="text" name="address.sp.pname" /></label><br/>
- <label for="address.sp.price">特产价格:<input type="text" name="address.sp.price" /></label><br/>
- <input type="submit" value="提交" />
- </form>
②Map
- @RequestMapping("/map")
- public String retMap(Map<String, Object> map) {
- map.put("name", "齐天大圣");
- return "show";
- }
方法中添加 map参数, 往map中放置数据,就可以发送到jsp页面!
页面显示:
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>显示</title>
- </head>
- <body>
- <h2>${name}</h2>
- </body>
- </html>
③Model接口
- @RequestMapping("/model")
- public String retModel(Model model) {
- model.addAttribute("name", "我是Model!!");
- return "show";
- }
- <body>
- <h2>${name}</h2>
- <h2>${requestScope.name}</h2>
- <h2>${sessionScope.name}</h2>
- </body>
总结: 使用以上三种情况可以将数据返回给页面,页面使用EL表达式即可获取!但是要注意!数据放入的是requestScope作用域!其他域获取不到!
二、@SessionAttributes注解
①@SessionAttributes注解原理
默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中。
②@SessionAttributes参数
@SessionAttributes注解中有两个属性:一个是value,用于指定哪个对象要放在session域中;type用于指定哪种类型的对象放在session域中,两个参数可以同时配合使用。例如:
–@SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
– @SessionAttributes(value={“user1”, “user2”})
– @SessionAttributes(types={User.class, Dept.class})
③代码展示
- @RequestMapping("/test")
- public String test(Map<String, Object> map) {
- map.put("names", Arrays.asList("aaa", "bbb", "ccc"));
- map.put("age", 18);
- return "hello";
- }
JSP页面:
上面代码没有指定@SessionAttributes,所有在session域总无法获取到对应的数据。
- @Controller
- @SessionAttributes(value={"names"},types={Integer.class})
- public class DemoServlet1 {
-
- @RequestMapping("/test")
- public String test(Map<String, Object> map) {
- map.put("names", Arrays.asList("aaa", "bbb", "ccc"));
- map.put("age", 18);
- return "hello";
- }
- }
JSP页面:
@SessionAttributes注解只能在类上使用,不能在方法上使用
三、Controller原生ServletAPI
如果我们需要使用Servlet内部常用类:
- HttpServletRequest
- HttpServletResponse
- HttpSession 等
直接在Controller层的方法中传入对应参数即可,不分顺序
注意:如果使用maven项目 需要导入 jsp jstl servlet api
代码展示:
- @RequestMapping("/test2")
- public String getSlt(HttpServletRequest request,HttpServletResponse response,HttpSession session) {
- return "hello";
- }
- @RequestMapping("/test2")
- public String show5(HttpServletRequest request,HttpServletResponse response,HttpSession session){
- System.out.println(request);
- ServletContext application = request.getServletContext();
-
- System.out.println(response);
- System.out.println(session);
- System.out.println(application);
- return "success";
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。