zoukankan      html  css  js  c++  java
  • Spring MVC控制层的返回类型--String类型与Bean类型

    SpringMVC控制层的返回类型形式多样,现拿其中的两种--String类型与Bean类型作以说明。

    一、测试项目的结构

    说明:(jsp的名字没起好)

    控制层:UserController.java --对用户的相关操作;

    视图层:toFormTest.jsp--跳转至formTest.jsp

    (这样跳转的原因:1.由于jsp文件夹在WEB-INF目录下,所以无法直接访问;2.在目标地址formTest.jsp中的表单采用了sf标签,需在控制层中初始化表单所绑定的bean对象,所以需先进入控制层(初始化目标地址表单所绑定的bean对象)然后在跳转至目标地址。)

    formTest.jsp--添加User的jsp

    formTestTarget.jsp--添加User后显示已添加的User信息

    showUserTest.jsp--显示指定User的详细信息

    二、控制层--UserController.java 的返回类型

    A.返回值类型为String类型

    1.控制层跳转至视图层

    说明:点击toFormTest.jsp中的请求,执行UserController.java中的formTest方法,跳转至formTest.jsp。

    toFormTest.jsp

    <a href="user/formTest">formTest</a>

    UserController.java

    //跳转至http://localhost:8081/spring_user/user/formTest.jsp
        @RequestMapping(value="/formTest",method=RequestMethod.GET)
        public String formTest(Model model){
            model.addAttribute(new User());
            return "user/formTest";
        }

    小结:需要说明的是,跳转formTest.jsp后,地址栏中的显示地址是逻辑路径,如下:

    http://localhost:8081/spring_user/user/formTest

    2.控制层方法之间的跳转

    说明:在formTest.jsp添加用户后,提交至UserController.java中的formTest方法,跳转至formTestTarget.jsp显示添加的User信息。需注意的是:formTest方法设置其返回地址为: return "user/formTestTarget";即可完成这一目的。但现在为了说明如何在控制层的方法之间跳转,所以注释掉。此外,在form表单中并未填写"action"信息(请求地址),但为何会跳转至UserController.java的formTest方法呢?这是因为在formTest.jsp的地址栏中显示的地址为:http://localhost:8081/spring_user/user/formTest,提交的地址自然是UserController.java的formTest方法。

    formTest.jsp

    <sf:form method="post" modelAttribute="user" enctype="multipart/form-data">
              username:<sf:input path="username"/> <sf:errors path="username" /><br>
              password:<sf:password path="password"/> <sf:errors path="password"/><br>
              <input type="submit" value="添加用户"/><br>
    </sf:form> 

    UserController.java

        //跳转至toFormTestTarget方法
        @RequestMapping(value="/formTest",method=RequestMethod.POST)
        public String formTest(Model model,@Validated User user, BindingResult br){
            //如果有错误返回
            if(br.hasErrors()){
                return "user/formTest";
            }
            model.addAttribute(user);
    //        return "user/formTestTarget";//跳转至formTestTarget.jsp后页面地址栏中的地址:http://localhost:8081/spring_user/user/formTest--可以看出此跳转方式为请求转发
    //        return "redirect:/user/formTestTarget";//重定向至formTestTarget.jsp--无效[提交后的无效路径:http://localhost:8081/spring_user/user/formTestTarget]
            return "redirect:/user/toFormTestTarget";//重定向至方法toFormTestTarget--能够跳转至formTestTarget.jsp,但无法将Model中的数据带至formTestTarget.jsp。
        }

    //跳转至http://localhost:8081/spring_user/user/formTestTarget.jsp @RequestMapping(value="/toFormTestTarget") public String toFormTest(){ return "user/formTestTarget"; }

    小结:formTest方法中的返回类型仍是String类型,但其目标地址已不再是跳转至视图层,而是从formTest方法跳转至toFormTest方法,这样使用redrect关键字完成了这一目的。

    需注意的是,无法以重定向的方式从控制层跳转至视图层。

    B.返回值类型为Bean类型

    说明:在formTestTarget.jsp页面点击"showUser",请求UserController.java中的showUserTest方法,然后跳转至showUserTest.jsp显示用户的详细信息。

    formTestTarget.jsp

    username:${user.username }<br>
    password:${user.password }<br>
    <a href="showUserTest">showUser</a> 

    UserController.java

    //跳转至http://localhost:8081/spring_user/user/showUserTest.jsp
        @RequestMapping(value="/showUserTest",method=RequestMethod.GET)
        public User showUserTest(Model model){
            model.addAttribute("msg", "返回值为User类型");
            return userService.findById(30);
        }

    小结:showUserTest方法的返回类型是一个User类型,并未指明一个地址,此时sringMVC会默认返回“请求的逻辑路径相映射的物理路径”:formTestTarget.jsp中的请求地址为user目录下的showUserTest,此时它是UserController.java中的一个方法,但执行完该方法后,由于没有返回类型为User,所以Spring会默认返回user目录下的showUserTest.jsp。

  • 相关阅读:
    2017-2018-1 20155306 《信息安全系统设计基础》第11周学习总结
    2017-2018-1 20155306 实验三 实时系统
    2017-2018-1 20155306 《信息安全系统设计基础》第9周学习总结
    2017-2018-1 20155306 mypwd的实现
    2017-2018-1 20155306 《信息安全系统设计基础》第8周课上测试+课下实践
    2017-2018-1 20155306 《信息安全系统设计基础》第8周学习总结
    2017-2018-1 20155306 《信息安全系统设计基础》第7周学习总结
    20155212——man指令的使用及mypwd的实现
    2017-2018-1 20155213 《信息安全系统设计基础》第七周学习总结
    2017-2018-1 20155213 20155303 实验二 固件程序设计
  • 原文地址:https://www.cnblogs.com/wql025/p/4810731.html
Copyright © 2011-2022 走看看