当前位置:   article > 正文

SpringMVC的学习(三)——Controller传递数据_java controller 传2 个参数

java controller 传2 个参数

一、Controller传递数据

有三种实现方案:

第一种:ModelAndView

第二种:Map

第三种:Model接口

①:ModelAndView

  1. public class DemoController {
  2. @RequestMapping("/edit")
  3. public ModelAndView edit() {
  4. User user = new User();
  5. user.setUsername("张三");
  6. user.setAge(11);
  7. user.setPassword("123");
  8. Address address = new Address();
  9. address.setProvince("辽宁");
  10. address.setCity("葫芦岛");
  11. user.setAddress(address);
  12. ModelAndView modelAndView = new ModelAndView();
  13. // viewname 指定要查找的页面
  14. modelAndView.setViewName("user/form");
  15. // 添加modelAndView添加携带的user数据
  16. modelAndView.addObject("user", user);
  17. return modelAndView;
  18. }
  19. }

页面显示代码:

/WEB-INF/user/form.jsp

  1. <form action="/spring-mvc-22/user/add" method="post">
  2. <label for="username">用户名:<input type="text" value="${user.username }" id="username" name="username" /></label><br/>
  3. <label for="password">密码:<input type="password" id="password" name="password" /></label><br/>
  4. <label for="age">年龄:<input type="text" value="${user.age }" name="age" /></label><br/>
  5. <label for="address.province">省份:<input type="text" value="${user.address.province }" name="address.province" /></label><br/>
  6. <label for="address.city">城市:<input type="text" value="${user.address.city }" name="address.city" /></label><br/>
  7. <label for="address.sp.pname">特产名称:<input type="text" name="address.sp.pname" /></label><br/>
  8. <label for="address.sp.price">特产价格:<input type="text" name="address.sp.price" /></label><br/>
  9. <input type="submit" value="提交" />
  10. </form>

②Map

  1. @RequestMapping("/map")
  2. public String retMap(Map<String, Object> map) {
  3. map.put("name", "齐天大圣");
  4. return "show";
  5. }

方法中添加 map参数, 往map中放置数据,就可以发送到jsp页面!

页面显示:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6. <title>显示</title>
  7. </head>
  8. <body>
  9. <h2>${name}</h2>
  10. </body>
  11. </html>

③Model接口

  1. @RequestMapping("/model")
  2. public String retModel(Model model) {
  3. model.addAttribute("name", "我是Model!!");
  4. return "show";
  5. }
  1. <body>
  2. <h2>${name}</h2>
  3. <h2>${requestScope.name}</h2>
  4. <h2>${sessionScope.name}</h2>
  5. </body>

总结: 使用以上三种情况可以将数据返回给页面,页面使用EL表达式即可获取!但是要注意!数据放入的是requestScope作用域!其他域获取不到!

二、@SessionAttributes注解

①@SessionAttributes注解原理

默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中。

②@SessionAttributes参数

  • names:这是一个字符串数组。里面应写需要存储到session中数据的名称。
  • types:根据指定参数的类型,将模型中对应类型的参数存储到session中
  • value:其实和names是一样的。

@SessionAttributes注解中有两个属性:一个是value,用于指定哪个对象要放在session域中;type用于指定哪种类型的对象放在session域中,两个参数可以同时配合使用。例如:

–@SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。

– @SessionAttributes(value={“user1”, “user2”})

– @SessionAttributes(types={User.class, Dept.class})

③代码展示

  1. @RequestMapping("/test")
  2. public String test(Map<String, Object> map) {
  3. map.put("names", Arrays.asList("aaa", "bbb", "ccc"));
  4. map.put("age", 18);
  5. return "hello";
  6. }

JSP页面:

上面代码没有指定@SessionAttributes,所有在session域总无法获取到对应的数据。

  1. @Controller
  2. @SessionAttributes(value={"names"},types={Integer.class})
  3. public class DemoServlet1 {
  4. @RequestMapping("/test")
  5. public String test(Map<String, Object> map) {
  6. map.put("names", Arrays.asList("aaa", "bbb", "ccc"));
  7. map.put("age", 18);
  8. return "hello";
  9. }
  10. }

JSP页面:

@SessionAttributes注解只能在类上使用,不能在方法上使用

三、Controller原生ServletAPI

如果我们需要使用Servlet内部常用类:

- HttpServletRequest

- HttpServletResponse

- HttpSession 等

直接在Controller层的方法中传入对应参数即可,不分顺序

注意:如果使用maven项目 需要导入 jsp jstl servlet api

代码展示:

  1. @RequestMapping("/test2")
  2. public String getSlt(HttpServletRequest request,HttpServletResponse response,HttpSession session) {
  3. return "hello";
  4. }
  1. @RequestMapping("/test2")
  2. public String show5(HttpServletRequest request,HttpServletResponse response,HttpSession session){
  3. System.out.println(request);
  4. ServletContext application = request.getServletContext();
  5. System.out.println(response);
  6. System.out.println(session);
  7. System.out.println(application);
  8. return "success";
  9. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/302750
推荐阅读
相关标签
  

闽ICP备14008679号