本文章會繼續討論 Spring MVC 的基本功能實作,當然之前的文章範例 Hello Spring 內容提到的只是 Spring MVC 的基礎設定,接著我們要慢慢地來實作一個 Modern Web 該有功能。
如何在 JSP 與 Controller 之間傳遞參數?
假設需求為使用者會在畫面填寫資料,填寫完後點擊送出按鈕並導向另一個新的頁面,並在新的頁面將剛剛填入的資料顯示出來。首先來建立填寫資料的畫面,我習慣將頁面都放置於 /WebContent/pages/ 底下,因此我建立了一個頁面 /WebContent/pages/home.jsp,操作畫面看起來如下圖 :
可以看到很簡單的名字與年齡輸入頁面,其頁面程式碼內容如下圖:
本次範例利用 Form 標籤為主, action 屬性直接指定 Request 的目的地,method 設定為 post。當使用者按下 Submit 按鈕後,Request 透過之前提到的 Dispatcher 將它導向對應的 Controller,且該 Controller 內必須有一個 @RequestMapping (value="/handleRequest") 的 Method,因此其 Controller 內容如下:
除了@RequestMapping 之外,還可以看到 @RequestParam、Model 這兩個新朋友。
@RequestParam
即宣告將會傳入的參數型態與名稱,傳入參數名稱與宣告名稱相同就會自動代入參數值,若你宣告了該參數卻並未傳入時會出現錯誤訊息,例如我將年齡欄位從 JSP 拿掉或參數名稱不同,其訊息為 Http Status 400 - Required int parameter 'age' is not present。
Model
Controller 中 Model 物件你可以簡單的想像成它是個 HashMap,Controller 執行完畢後 Model 物件將如同一個資料包裹被傳遞出去,在此範例中我們將要顯示的參數通通都放進去,如上面的程式碼內容。
別忘了該 Controller 執行完畢,若未指定 View 會自動尋找相對應的 JSP,因此我們還缺少了 View,按照我的習慣建立 /WebContent/pages/handleRequest.jsp,其內容如下:
按照範例填入資料並值執行送出,結果顯示應該如下:
以上是最簡單狀況,但當參數是陣列時該怎麼處理?我另外做了一個簡單的範例,如下:
其頁面程式碼內容如下:
宣告 Controller 傳入參數為字串陣列 String [ ] ,內容如下:
如果回傳資料為陣列且要顯示於畫面中,本次範例是用 JSP taglib 來作處理,因此會需要增加 JSTL 的 Library ( 於此搜尋 JSTL 使用最新版本 ) 與宣告在 JSP 中,,顯示頁面程式碼內容下:
最後顯示結果如下:
提供一下本範例所有檔案擺放位置:
以上為 Spring MVC 基本的參數傳遞範例與介紹。其他 Spring Framework 相關教學可以參考本篇整理。
熱門文章
-
相信大家有時等待測試、shell script 完成任務需要很長的時間,因此希望任務完成可以即時收到通知。在 Mac 上有 Growl 可以滿足這個需求,但 Growl 是收費軟體。所以我採用 terminal-notifier 工具發送 OS X 的通知 ( Notific...
-
Gitlab 為了讓使用者部署程式更方便,它提供了一個功能叫 Deploy Keys,使用者將 SSH Public Key 加入,之後不需要密碼就可以獲得程式庫 read-only 的權限,所以很適合運用在 CI 中。通常在 Unix-like 環境中將對應的 Key 與其使用...
-
TuxGuitar 是一個 Open Source 的編曲軟體,不僅擁有多個平台版本 ( Windows、Linux、Mac ),而且還可以讀取 Guitar Pro 的檔案。但也因為是免費的軟體,所以音源、效果沒有其他軟體來的多樣化。但對於練習、簡單編曲是絕對沒問題的。( 其他...
-
因常常使用 Mac Book Pro 開發,久而久之就習慣 MacVim 、Sublime Text 等軟體的顏色配置, 當然 Eclipse 也可以自己一步一步設定自己想要的顏色配置,但仍想要找找看是否有漂亮的 Color Themes,果然 Eclipse 的資源還是很豐富。...
-
在 Vim 中操作需要樹狀化顯示資料夾、檔案時可以使用 NERDTree 工具,而為了更加一步讓 Vim 操作起來更像與時俱進的 IDE,我們可以使用 NERDTree Tabs 來強化它。因此本篇將介紹如何在 Vim 中安裝、使用 NERDTree Tabs。( 其他 Linu...