使用 Spring 的表單標簽
通過 SpringMVC 的表單標簽可以實現將模型數據中的屬性和 HTML 表單元素相綁定,以實現表單數據更便捷編輯和表單值的回顯.
form 標簽
一般情況下,通過 GET 請求獲取表單頁面,而通過POST 請求提交表單頁面,因此獲取表單頁面和提交表單頁面的 URL 是相同的。只要滿足該最佳條件的契約,<form:form> 標簽就無需通過 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” /> :顯示特定表單對象屬性的錯誤
處理靜態資源
1. 為什么會有這樣的問題:
優雅的 REST 風格的資源URL 不希望帶 .html 或 .do 等后綴. 若將 DispatcherServlet 請求映射配置為 /, 則 Spring MVC 將捕獲 WEB 容器的所有請求, 包括靜態資源的請求,SpringMVC 會將他們當成一個普通請求處理, 因找不到對應處理器將導致錯誤。
2. 解決: 在 SpringMVC 的配置文件中配置 <mvc:default-servlet-handler/>
<!-- default-servlet-handler 將在 SpringMVC 上下文中定義一個 DefaultServletHttpRequestHandler, 它會對進入 DispatcherServlet 的請求進行篩查, 如果發現是沒有經過映射的請求, 就將該請求交由 WEB 應用服務器默認的 Servlet 處理. 如果不是靜態資源的請求,才由 DispatcherServlet 繼續處理 一般 WEB 應用服務器默認的 Servlet 的名稱都是 default. 若所使用的 WEB 服務器的默認 Servlet 名稱不是 default,則需要通過 default-servlet-name 屬性顯式指定 --> <mvc:default-servlet-handler/>