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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM