1. 程式人生 > >SpringMVC表單標籤和表單標籤簡介

SpringMVC表單標籤和表單標籤簡介



SpringMVC<from:form>表單標籤和<input>表單標籤簡介

   在使用SpringMVC的時候我們可以使用Spring封裝的一系列表單標籤,這些標籤都可以訪問到ModelMap中的內容。下面將對這些標籤一一介紹。

   在正式介紹SpringMVC的表單標籤之前,我們需要先在JSP中宣告使用的標籤,具體做法是在JSP檔案的頂部加入以下指令:

Jsp程式碼 複製程式碼 收藏程式碼
  1. <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>  

1.1     form標籤

使用Spring的form標籤主要有兩個作用,第一是它會自動的繫結來自Model中的一個屬性值到當前form對應的實體物件,預設是command屬性,這樣我們就可以在form表單體裡面方便的使用該物件的屬性了;第二是它支援我們在提交表單的時候使用除GET和POST之外的其他方法進行提交,包括DELETE和PUT等。

1.1.1  支援繫結表單物件

我們先來看如下使用form標籤的一個示例:

Jsp程式碼
複製程式碼
 收藏程式碼
  1. <form:form action="formTag/form.do" method="post">  
  2.     <table>  
  3.         <tr>  
  4.             <td>Name:</td><td><form:input path="name"/></td>  
  5.         </tr>  
  6.         <tr>  
  7.             <td>Age:</td><td><form:input path="age"
    /></td>  
  8.         </tr>  
  9.         <tr>  
  10.             <td colspan="2"><input type="submit" value="提交"/></td>  
  11.         </tr>  
  12.     </table>  
  13. </form:form>  

       這個時候如果Model中存在一個屬性名稱為command的javaBean,而且該javaBean擁有屬性name和age的時候,在渲染上面的程式碼時就會取command的對應屬性值賦給對應標籤的值。如在上面的程式碼中,假設Model中存在一個屬性名稱為command的javaBean,且它的name和age屬性分別為“Zhangsan”和“36”時,那麼它在渲染時就會生成如下一段程式碼:

Html程式碼 複製程式碼 收藏程式碼
  1. <formid="command"action="formTag/form.do"method="post">
  2.     <table>
  3.         <tr>
  4.             <td>Name:</td><td><inputid="name"name="name"type="text"value="ZhangSan"/></td>
  5.         </tr>
  6.         <tr>
  7.             <td>Age:</td><td><inputid="age"name="age"type="text"value="36"/></td>
  8.         </tr>
  9.         <tr>
  10.             <tdcolspan="2"><inputtype="submit"value="提交"/></td>
  11.         </tr>
  12.     </table>
  13. </form>
<form id="command" action="formTag/form.do" method="post">
    <table>
        <tr>
            <td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>
        </tr>
        <tr>
            <td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="提交"/></td>
        </tr>
    </table>
</form>

       從上面生成的程式碼中,我們可以看出,當沒有指定form標籤的id時它會自動獲取該form標籤繫結的Model中對應屬性名稱作為id,而對於input標籤在沒有指定id的情況下它會自動獲取path指定的屬性作為id和name。

       我們指定form預設自動繫結的是Model的command屬性值,那麼當我的form物件對應的屬性名稱不是command的時候,應該怎麼辦呢?對於這種情況,Spring給我們提供了一個commandName屬性,我們可以通過該屬性來指定我們將使用Model中的哪個屬性作為form需要繫結的command物件。除了commandName屬性外,指定modelAttribute屬性也可以達到相同的效果。這裡假設上面程式碼中我們存放在Model中的是user物件而不是預設的command物件,那麼我們的程式碼就可以如下定義了:

Jsp程式碼 複製程式碼 收藏程式碼
  1. <form:form action="formTag/form.do" method="post" commandName="user">  
  2.     <table>  
  3.         <tr>  
  4.             <td>Name:</td><td><form:input path="name"/></td>  
  5.         </tr>  
  6.         <tr>  
  7.             <td>Age:</td><td><form:input path="age"/></td>  
  8.         </tr>  
  9.         <tr>  
  10.             <td colspan="2"><input type="submit" value="提交"/></td>  
  11.         </tr>  
  12.     </table>  
  13. </form:form>  

1.1.2  支援全部的Http請求方法

Jsp程式碼 複製程式碼 收藏程式碼
  1. <form:form action="formTag/form.do" method="delete" modelAttribute="user">  
  2.     <table>  
  3.         <tr>  
  4.             <td>Name:</td><td><form:input path="name"/></td>  
  5.         </tr>  
  6.         <tr>  
  7.             <td>Age:</td><td><form:input path="age"/></td>  
  8.         </tr>  
  9.         <tr>  
  10.             <td colspan="2"><input type="submit" value="提交"/></td>  
  11.         </tr>  
  12.     </table>  
  13. </form:form>  

在上面程式碼中我們設定了該form的提交方法是delete,這樣在後臺我們就可以給對應的請求方法的RequestMapping加上method為RequestMethod.DELETE的限制。我們來看一下上面的程式碼在進行渲染的時候會生成怎樣的Html程式碼,其生成的程式碼如下所示:

Html程式碼 複製程式碼 收藏程式碼
  1. <formid="user"action="formTag/form.do"method="post">
  2.     <inputtype="hidden"name="_method"value="delete"/>
  3.     <table>
  4.         <tr>
  5.             <td>Name:</td><td><inputid="name"name="name"type="text"value="ZhangSan"/></td>
  6.         </tr>
  7.         <tr>
  8.             <td>Age:</td><td><inputid="age"name="age"type="text"value="36"/></td>
  9.         </tr>
  10.         <tr>
  11.             <tdcolspan="2"><inputtype="submit"value="提交"/></td>
  12.         </tr>
  13.     </table>
  14. </form>
<form id="user" action="formTag/form.do" method="post">
    <input type="hidden" name="_method" value="delete"/>
    <table>
        <tr>
            <td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>
        </tr>
        <tr>
            <td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="提交"/></td>
        </tr>
    </table>
</form>

從它生成的程式碼我們可以看出,Spring在實現除GET和POST之外的請求方法時,還是使用的POST方法進行請求,然後給表單加上了一個隱藏域,用以表示真正的請求方法,這個隱藏域的名稱預設是“_method”。上面這樣定義之後是不是就意味著我們可以以delete方式訪問到“formTag/form.do”了呢?答案是不行的。這樣定義我們只是多加了一個用以表示請求方法的隱藏域而已,實際的請求方式還是POST。Spring為我們提供了一個Filter——HiddenHttpMethodFilter,通過這個Filter我們可以把以POST方式傳遞過來的表示實際請求方式的引數轉換為對應的真正的Http請求方法。所以這個時候我們還需要在web.xml中加上如下程式碼:

Xml程式碼 複製程式碼 收藏程式碼
  1. <filter>
  2.    <filter-name>hiddenHttpMethodFilter</filter-name>
  3.    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6.    <filter-name>hiddenHttpMethodFilter</filter-name>
  7.    <url-pattern>/*</url-pattern>
  8. </filter-mapping>

       注意:HiddenHttpMethodFilter只能對以POST方式進行傳遞的表示請求方式的隱藏域轉換為真正的Http請求方式。當我們直接在form:form標籤的method中使用除GET和POST方法以外的其他方法時,Spring會自動生成以POST方式進行傳遞的表單以及對應的隱藏域。所以當我們需要手動的設定表示請求方法的隱藏域時,我們就需要指定表單的請求方式為POST,為GET將不會生效。

Jsp程式碼 複製程式碼 收藏程式碼
  1. <form:form action="formTag/form.do" method="post" modelAttribute="user">  
  2.     <input type="hidden" name="_method" value="head"/>  
  3.     <table>  
  4.         <tr>  
  5.             <td>Name:</td><td><form:input path="name"/></td>  
  6.         </tr>  
  7.         <tr>  
  8.             <td>Age:</td><td><form:input path="age"/></td>  
  9.         </tr>  
  10.         <tr>  
  11.             <td colspan="2"><input type="submit" value="提交"/></td>  
  12.         </tr>  
  13.     </table>  
  14. </form:form>  

上面程式碼就是一個手動定義請求方式的隱藏域的示例。這裡表示請求方式的隱藏域的名稱預設是“_method”,如果不想使用這個預設值的話,我們也可以通過form:form標籤的methodParam屬性來指定。如下面這個示例:

Jsp程式碼 複製程式碼 收藏程式碼
  1. <form:form action="formTag/form.do" method="post" methodParam="requestMethod" modelAttribute="user">  
  2.     <input type="hidden" name="requestMethod" value="head"/>  
  3.     <table>  
  4.         <tr>  
  5.             <td>Name:</td><td><form:input path="name"/></td>  
  6.         </tr>  
  7.         <tr>  
  8.             <td>Age:</td><td><form:input path="age"/></td>  
  9.         </tr>  
  10.         <tr>  
  11.             <td colspan="2"><input type="submit" value="提交"/></td>  
  12.         </tr>  
  13.     </table>  
  14. </form:form>  

同時我們也要告訴HiddenHttpMethodFilter我們是使用哪個表單引數作為methodParam,所以我們需要在配置HiddenHttpMethodFilter的時候指明methodParam對應的值。

Xml程式碼 複製程式碼 收藏程式碼
  1. <filter>
  2.    <filter-name>hiddenHttpMethodFilter</filter-name>
  3.    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  4.    <init-param>
  5.        <param-name>methodParam</param-name>
  6.        <param-value>requestMethod</param-value>
  7.    </init-param>
  8. </filter>
  9. <filter-mapping>
  10.    <filter-name>hiddenHttpMethodFilter</filter-name>
  11.    <url-pattern>/*</url-pattern>
  12. </filter-mapping>

       另外需要注意的是在有Multipart請求處理的時候HiddenHttpMethodFilter需要在Multipart處理之後執行,因為在處理Multipart時需要從POST請求體中獲取引數。所以我們通常會在HiddenHttpMethodFilter之前設立一個MultipartFilter。MultipartFilter預設會去尋找一個名稱為filterMultipartResolver的MultipartResolver bean物件來對當前的請求進行封裝。所以當你定義的MultipartResolver的名稱不為filterMultipartResolver的時候就需要在定義MultipartFilter的時候通過引數multipartResolverBeanName來指定。

Xml程式碼 複製程式碼 收藏程式碼
  1. <filter>
  2.    <filter-name>multipartFilter</filter-name>
  3.    <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
  4.    <init-param>
  5.        <param-name>multipartResolverBeanName</param-name>
  6.        <param-value>multipartResolver</param-value>
  7.    </init-param>
  8. </filter>
  9. <filter-mapping>
  10.    <filter-name>multipartFilter</filter-name>
  11.    <url-pattern>/*</url-pattern>
  12. </filter-mapping>
  13. <filter>
  14.    <filter-name>hiddenHttpMethodFilter</filter-name>
  15.    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  16.    <init-param>
  17.        <param-name>methodParam</param-name>
  18.        <param-value>requestMethod</param-value>
  19.    </init-param>
  20. </filter>
  21. <filter-mapping>
  22.    <filter-name>hiddenHttpMethodFilter</filter-name>
  23.    <url-pattern>/*</url-pattern>
  24. </filter-mapping>

1.2     input標籤

SpringMVC的input標籤會被渲染為一個type為text的普通Html input標籤。使用SpringMVC的input標籤的唯一作用就是它能繫結表單資料。SpringMVC表單標籤最大的好處就是它支援資料繫結,當我們的表單標籤不需要繫結的資料的時候,我們應該使用普通的Html標籤。關於input標籤繫結表單資料的方法已經在介紹form標籤的時候順帶介紹過了,這裡就不再過多的贅述了。

Jsp程式碼 複製程式碼 收藏程式碼
  1. <form:form action="formTag/form.do" method="head" modelAttribute="user" methodParam="requestMethod">  
  2.     <table>  
  3.         <tr>  
  4.             <td>Name:</td><td><form:input path="name"/></td>  
  5.         </tr>  
  6.         <tr>  
  7.             <td>Age:</td><td><form:input path="age"/></td>  
  8.         </tr>  
  9.         <tr>  
  10.             <td colspan="2"><input type="submit" value="提交"/></td>  
  11.         </tr>  
  12.     </table>  
  13. </form:form>  
            
           

相關推薦

SpringMVC標籤標籤簡介

 SpringMVC<from:form>表單標籤和<input>表單標籤簡介    在使用SpringMVC的時候我們可以使用Spring封裝的一系列表單標籤,這些標籤都可以訪問到ModelMap中的內容。下面將對這些標籤一一介紹。  

HTML常用行標籤控制元件

HTML常用的行級標籤 行內元素不獨佔一行 HTML連結 a標籤 href屬性是必須要的屬性,target指定連線以何種方式開啟,_blank用新視窗開啟,預設是self原視窗開啟。 <a href="連結" target="_blank">連結文字</a&

JSP提交校驗

function validate_channel_info(channelform) { if(channelform.channelname.value=="")

例模式中的餓漢式懶漢式

img image bubuko 圖片 bsp 懶漢 餓漢式 單例模式 http 餓漢式單例: 懶漢式單例 單例模式中的餓漢式單例和懶漢式單例

聯合使用jsp標籤struts的標籤在jsp頁面獲取當前時間

有時候需要在頁面獲取當前時間,但是又不想從後端傳過來。使用jsp的標籤和struts的時間日期格式標籤可以獲取自己想要的時間格式。 <div> <jsp:useBean id="time" class="java.util.Date" scope="req

python學習之網站的編寫(HTML,CSS,JS)(十四)----------CSS的display行內標籤塊級標籤的轉換,控制標籤是否顯示

行內標籤:有多大就佔多大,無法設定高度,寬度和邊距。 塊級標籤:佔一行,可以設定高度,寬度和邊距。 塊級標籤轉為行內標籤:display:inline 行內標籤轉為塊級標籤:display:block 還有一個特殊的轉換,既包含塊級標籤的屬性,又具有行內標籤的屬性,自己有多少佔多少,

html中行級標籤塊級標籤

目錄行級標籤塊級標籤總結 行級標籤 特點:可以和其他元素保持在同一行,不可以自動換行,但不能設定寬高 常見的行級標籤:a,span,strong,u(下劃線),em(強調),i(斜體),sub(下標),

設計模式-例模式-餓漢式懶漢式

單例模式(Singleton pattern)一個在設計模式中比較簡單的模式,我們常說的餓漢式和懶漢式是最常舉例的兩種寫法。 如下 餓漢式: public class Singleton { private static final Singleton sin

Java EE入門教程系列第二章JSP(六)——JSP標準標籤自定義標籤的配置與使用

2.6 JSP的標籤 2.6.1 標籤簡介 標籤就是把一段具體業務的Java程式碼封裝起來,然後以標記語言的形式在頁面檔案中對它進行呼叫,增強頁面檔案和Java程式的獨立性。 目前標籤庫有兩種形式:標準標籤庫和自定義標籤。 JSP標準標籤(JSTL)是一個可以實現We

(精)Spring IOC核心原始碼學習III:bean標籤自定義標籤實現原理

本文將解析spring bean定義標籤和自定義標籤的解析實現原理。這裡說的標籤僅限於以xml作為bean定義描述符的spring容器,繼承AbstractXmlApplicationContext的一些子 容器,如XmlApplicationContext、ClassPat

HTML float浮動標籤background 背景標籤

做p標籤在標籤環繞img標籤        img標籤要浮動就要看向那邊浮動      <p class="p1"><img class="img1" src="images/baall.jpg">太陽系是以太陽為中心,和所有受到太陽的重力約束天體的

EF 學習系列二 資料庫的建立關係配置(Fluent API、Data Annotations、約定)

  上一篇寫了《Entity Farmework領域建模方式 3種程式設計方式》,現在就Code First 繼續學習 1、資料庫表的建立 新建一個MVC的專案,在引用右擊管理NuGet程式包,點選瀏覽搜尋EF安裝,我這裡主要是EF6.0 以上的學習 所以都安裝6.0 以上的版本

<form>(標籤常用的型別

  1.定義和用法 <form> 標籤用於為使用者輸入建立 HTML 表單。 表單能夠包含 input 元素,比如文字欄位、複選框、單選框、提交按鈕等等。 表單還可以包含 menus、textarea、fieldset、legend 和 label 元素。 表單用於向伺服器傳輸

Spring MVC 資料繫結標籤

資料繫結是將使用者輸入繫結到領域模型的一種特性。 資料繫結的好處: 1. 型別總是為 String 的 HTTP 請求引數,可用於填充不同型別的物件屬性。 2. 當輸入驗證失敗時,會重新生成一個 HTML 表單。 為了高效的使用資料繫結,還需要 Spring 的表單標籤庫。表單標籤庫中包含了可以用在

html的標籤框架標籤

目錄 表單標籤 框架標籤  其他標籤 表單標籤 表單是html中重要的一部分 <form></form>表單標籤,用於蒐集不同型別的使用者輸入,比如註冊資訊,購物資訊等    name:表單的名稱 &n

補充,labed標籤,html5新增元素語義

<h2>label標籤的使用</h2>     <!--label標籤給予人們友好的操作,選中時,點中文字時自動選中文字框-->     <label>使用者名稱:<input type="text"></la

Spring MVC---資料繫結標籤

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transi

Springmvc知識三------重定向&標籤&靜態資源的處理

重定向 在一般情況下,我們的控制器方法返回字串型別值,會被封裝成一個ModelAndView,然後被當做邏輯檢視名稱進行處理。但是如果返回的字串中以“forward:”和“redirect:”開頭時,Springmvc將會對他們做特殊處理,將redirect當

使用@ModelAttribute標籤庫將提交的值繫結到類中

使用@ModelAttribute和表單標籤庫將表單提交的值直接繫結到類中 場景:使用spring框架時,在控制類方法中可以使用@ModelAttribute標記自定義類引數,spring會自動將表單提的值繫結到標記的類中同名屬性中。 作用:用於轉化表單資料型別,同時便於將表單值傳遞

SpringMVC標籤封裝物件

 SpringMVC<from:form>表單標籤和<input>表單標籤簡介    在使用SpringMVC的時候我們可以使用spring封裝的一系列表單標籤,這些標籤都可以訪問到ModelMap中的內容。下面將對這些標籤一一介紹。    在正式介紹SpringMVC的