1. 程式人生 > >方法形參如何繫結 URL引數(一)

方法形參如何繫結 URL引數(一)

       
        我們在 ② 處添加了一個 ModelMap 屬性,其屬性名為 currUser,而 ① 處通過 @SessionAttributes 註解將 ModelMap 中名為 currUser 的屬性放置到 Session 中,所以我們不但可以在 listBoardTopic() 請求所對應的 JSP 檢視頁面中通過 request.getAttribute(“currUser”) 和 session.getAttribute(“currUser”) 獲取 user 物件,還可以在下一個請求所對應的 JSP 檢視頁面中通過 session.getAttribute(“currUser”) 或 ModelMap#get(“currUser”) 訪問到這個屬性。
        1)這裡我們僅將一個 ModelMap 的屬性放入 Session 中,其實 @SessionAttributes 允許指定多個屬性:
             你可以通過字串陣列的方式指定多個屬性,如 @SessionAttributes({“attr1”,”attr2”})。

        2)此外,@SessionAttributes 還可以通過屬性型別指定要 session 化的 ModelMap 屬性:
             如 @SessionAttributes(types = User.class),
           當然也可以指定多個類,如 @SessionAttributes(types = {User.class,Dept.class}),

        3)還可以聯合使用屬性名和屬性型別指定:
            @SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})。
           
    (2)使模型物件的特定屬性具有 Session 範圍的作用域(獲取)

        還請看上面這段程式碼的第③部分。
        上面講述瞭如何往ModelMap中放置屬性以及如何使ModelMap中的屬性擁有Session域的作用範圍。除了在JSP檢視頁面中通過傳統的方法訪問ModelMap中的屬性外,讀者朋友可能會問:是否可以將ModelMap中的屬性繫結到請求處理方法的入參中呢?答案是肯定的。Spring為此提供了一個@ModelAttribute的註解,下面是使用@ModelAttribute註解的例子
        在 ② 處,我們向 ModelMap 中新增一個名為 currUser 的屬性,
        而 ① 外的註解使這個 currUser 屬性擁有了 session 級的作用域。
        所以,我們可以在 ③ 處通過 @ModelAttribute 註解將 ModelMap 中的 currUser 屬性繫結以請求處理方法的 user 入參中。
        所以當我們先呼叫以下 URL 請求:
        http://localhost/bbtForum.do?method=listBoardTopic&id=1&userName=tom&dept.deptId=12 以執行listBoardTopic()請求處理方法,
        然後再訪問以下URL: http://localhost/sample/bbtForum.do?method=listAllBoard
        你將可以看到 listAllBoard() 的 user 入參已經成功繫結到 listBoardTopic() 中註冊的 session 級的 currUser 屬性上了