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的具体用法可以参考之前的博客。

  • 相关阅读:
    影评
    札记
    竞赛203
    竞赛201
    StopWatch的使用
    mysql:GROUP_CONCAT
    DispatcherServlet核心方法doDispatch解析
    class对象与实例对象
    mybatis与传统ORM框架的区别
    servlet容器中listener、filter、interceptor的启动顺序
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12179670.html
Copyright © 2011-2022 走看看