1. 程式人生 > 實用技巧 >【SpringMVC】表單標籤 & 處理靜態資源

【SpringMVC】表單標籤 & 處理靜態資源

SpringMVC 表單標籤 &處理靜態資源

使用 Spring 的表單標籤

• 通過 SpringMVC 的表單標籤可以實現將模型資料中的屬性和 HTML 表單元素相繫結,以實現表單資料更便捷編輯和表單值的回顯

form 標籤

  • 一般情況下,通過 GET 請求獲取表單頁面,而通過 POST 請求提交表單頁面,因此獲取表單頁面和提交表單 頁面的 URL 是相同的。只要滿足該最佳條件的契約, 標籤就無需通過 action 屬性指定表單提交的 URL
  • 可以通過 modelAttribute 屬性指定繫結的模型屬性,若沒有指定該屬性,則預設從 request 域物件中讀取 command 的表單 bean,如果該屬性值也不存在,則會發生錯誤。

表單標籤

SpringMVC 提供了多個表單元件標籤,如 <form:input/><form:select/> 等,用以繫結表單欄位的屬性值,它們的共有屬性如下:
- path:表單欄位,對應 html 元素的 name 屬性,支援級聯屬性
- htmlEscape:是否對錶單值的 HTML 特殊字元進行轉換,預設值為 true
- cssClass:表單元件對應的 CSS 樣式類名
- cssErrorClass:表單元件的資料存在錯誤時,採取的 CSS 樣式

  • form:input、form:password、form:hidden、form:textarea:對應 HTML 表單的 text、password、hidden、textarea 標籤
  • form:radiobutton:單選框元件標籤,當表單 bean 對應的屬性值和 value 值相等時,單選框被選中
  • form:radiobuttons:單選框組標籤,用於構造多個單選框
    • items:可以是一個 List、String[] 或 Map
    • itemValue:指定 radio 的 value 值。可以是集合中 bean 的一個屬性值
    • itemLabel:指定 radio 的 label 值
    • delimiter:多個單選框可以通過 delimiter 指定分隔符
  • form:checkbox:複選框元件。用於構造單個複選框
  • form:checkboxs:用於構造多個複選框。使用方式同 form:radiobuttons 標籤
  • form:select:用於構造下拉框元件。使用方式同 form:radiobuttons 標籤
  • form:option:下拉框選項元件標籤。使用方式同 form:radiobuttons 標籤
  • form:errors:顯示錶單元件或資料校驗所對應的錯誤
    • <form:errors path= “ *” />:顯示錶單所有的錯誤
    • <form:errors path= “ user*” />:顯示所有以 user 為字首的屬性對應的錯誤
    • <form:errors path= “ username” />:顯示特定表單物件屬性的錯誤

處理靜態資源

  • 優雅的 REST 風格的資源 URL 不希望帶 .html 或 .do 等字尾
  • 若將 DispatcherServlet 請求對映配置為 /,則 Spring MVC 將捕獲 WEB 容器的所有請求,包括靜態資源的請求, SpringMVC 會將他們當成一個普通請求處理,因找不到對應處理器將導致錯誤。
  • 可以在 SpringMVC 的配置檔案中配置 <mvc:default-servlethandler/> 的方式解決靜態資源的問題:
    • <mvc:default-servlet-handler/> 將在 SpringMVC 上下文中定義一個 DefaultServletHttpRequestHandler,它會對進入 DispatcherServlet 的請求進行篩查,如果發現是沒有經過對映的請求,就將該請求交由 WEB 應用伺服器預設的 Servlet 處理,如果不是靜態資源的請求,才由 DispatcherServlet 繼續處理
    • 一般 WEB 應用伺服器預設的 Servlet 的名稱都是 default。若所使用的 WEB 伺服器的預設 Servlet 名稱不是 default,則需要通過 default-servlet-name 屬性顯式指定