zoukankan      html  css  js  c++  java
  • springmvc之SessionAttributes注解所引发的异常

    现有如下代码:

    SpringmvcTest.java

    @SessionAttributes(value={"person"},types= {String.class})
    @RequestMapping("/springmvc")
    @Controller
    public class SpringmvcTest {
        private static final String SUCCESS = "success";
        
    //    @ModelAttribute
    //    public void getPerson(@RequestParam(value="id",required=false) Integer id,
    //            Map<String,Object> map) {
    //        if(id != null) {
    //            Person person = new Person(1,"jack",18,"123456");
    //            System.out.println("模拟的数据库中的数据"+person);
    //            map.put("person", person);
    //        }
    //    }
        
        @RequestMapping(value="/testModelAttribute")
        public String testModelAttribute(@ModelAttribute("person") Person person) {
            System.out.println(person);
            return SUCCESS;
        }

    index.jsp

        <form action="springmvc/testModelAttribute" method="POST"><br>
            <input type="hidden" name="id" value="1"><br>
            <span>username:</span><input type="text" name="username" value="tom"><br>
            <span>age:</span><input type="text" name="age" value="20"><br>
            <input type="submit" value="submit"><br>
        </form>

    在testModelAttribute中使用@ModelAttribute("person")标识person,首先会在用ModelAttribute注解标识的方法中的map找到person,如果没有就回去SessionAttributes中的value属性中进行查找。value中有person,但是在session中并没有,于是会抛出异常:

     解决方法一:

    将@ModelAttribute("person")中的值改为与SessionAttributes中的不一致。即可以改为@ModelAttribute("myperson")

    此时在success.jsp:可以通过myperson名取得值

        <p>Success</p>
        <p>myperson person:${requestScope.myperson}</p>

    解决方法二:

    去掉@ModelAttribute("person"),同时要有@ModelAtrribute标识的方法。即将SpringmvcTest.java中的注释打开。

    此时在success.jsp:就可以通过person名来取得值

        <p>Success</p>
        <p>person person:${requestScope.person}</p>

     关于ModelAttribute和SessionAttributes的具体用法可以参考之前的博客。

  • 相关阅读:
    python3全栈开发-并发编程的多进程理论
    python3全栈开发-补充UDP的套接字、操作系统、并发的理论基础
    python3全栈开发-什么是粘包、粘包现象、如何解决粘包
    python3全栈开发-socket编程
    python3全栈开发- 元类metaclass(面试必考题)
    浏览器窗口
    SQL 笔记
    数据库连接字符串
    获取网卡地址信息
    启动所选择的应用程序
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12179670.html
Copyright © 2011-2022 走看看