天天看點

springmvc(三) 參數綁定、

      前面兩章就介紹了什麼是springmvc,springmvc的架構原理,并且會簡單的使用springmvc以及ssm的整合,從這一章節來看,就開始講解springmvc的各種功能實作,慢慢消化

                          --WZY

一、參數綁定

      1.1、什麼是參數綁定?

        客戶在浏覽器端會送出一些參數到伺服器端,比如使用者的登入等,就會傳username 和 password過來,springmvc則通過參數綁定元件将請求參數的内容進行資料轉換,然後将轉換後的值覆給controller方法的形參,這就是參數綁定的過程,其實,springmvc就是使用controller方法形參來接收請求的參數

      1.2、springmvc預設支援的參數類型

        可以在Controller方法的形參中直接使用以下類型

          HttpServletRequest、HttpServletResponse、HttpSession:這三個很熟悉,不做解釋

          Model/ModelMap:将model資料填充到request域,比如之前的ModelAndView對象添加list,其實就是将list添加到request作用域,隻是ModelAndView對象不僅能夠添加model資料,還能夠添加視圖。而Model對象的功能就隻有将model資料填充到request作用域

          

        如圖所示,就是這樣,在形參中使用這幾個對象,那麼在方法中就能直接用這幾個對象了。有了request對象,就能夠使用我們以前學過的老方法擷取請求參數等一些資訊了。

      1.3、綁定簡單類型的參數

        上面講解的隻是預設支援的參數類型,有request等一些對象,必然是很好很友善的一件事,比如擷取請求參數就可以得到解決了,但是springmvc提供更強大一些的功能。

        綁定簡單類型的參數規則:

          1.3.1、如果請求參數的key和Controller類中方法的形參名稱一緻,那麼就直接綁定;

            請求url:

http://localhost

:8080/ssm_test/editItems.do?id=2 模拟用戶端發送了一個id=2的請求參數過來,這裡使用的是get方式,如果post方式也是一樣的道理

            Controller方法:

                

            分析:形參中的名稱與請求參數的名稱相同,固可以直接綁定。

          1.3.2、如果請求參數的key和Controller類中方法的形參名稱不一緻,那麼就需要使用@RequestParam注解來進行參數綁定

:8080/ssm_test/editItems.do?itemsId=2 模拟用戶端發送了一個id=2的請求參數過來

            分析:使用@RequestParam("itemsId")注解将名為itemsId的請求參數的值指派給形參中名為id的參數。注意,在對應的形參前面加該注解。

      1.4、綁定pojo

        使用springmvc綁定pojo的參數時,要求jsp中input框的name值要和Controller方法形參的pojo對象中的屬性名稱一緻,如下圖

          jsp頁面

              

          controller方法

          Items類

      1.5、參數綁定時日期類型轉換問題

        在我們從jsp頁面傳過來的參數的類型都是object的,而我們自己編寫的是有具體類型的,比如id是需要int型,name是需要string型,而springmvc就會幫我們将這些簡單的類型自動進行類型轉換,但是當遇到Date類型的時候,就轉換不了,需要我們自己寫一個類型轉換器,然後給擴充卡配上,進而jsp傳過來的參數能夠轉換成我們需要的日期類型,如果不自定義類型轉換器的話,會報錯             即把請求中的日期字元串轉成java的日期類型,該日期類型與pojo中日期屬性的類型保持一緻            

        1.5.1、自定義Converter

DateConverter.java

  

        1.5.2、在springmvc.xml中配置該轉換器

          第一種方式(推薦):兩步搞定

            修改mvc:annotation-driven的配置

            配置自定義轉換器綁定

springmvc.xml中配置日期轉換器

          第二種方式:

View Code

      1.6、包裝pojo參數綁定

        與1.4的pojo參數綁定的差別在于,這裡将pojo放入一個包裝類中,如下圖,将Items類放入了ItemsQueryVO類中,ItemsQueryVO就是一個包裝pojo

          ItemsQueryVO

            

          jsp

                  

          controller:直接使用包裝pojo接收

      1.7、集合參數的綁定

        1.7.1、簡單類型的集合參數綁定,可以使用數組或者List來接收

        比如jsp頁面有一些多選框,複選框,這樣送出過來,就需要使用集合參數的綁定了。

        jsp

        controller

          使用數組來接收

            形參中的數組類型要和jsp中值的類型一緻,形參中的參數名稱要和jsp中name一緻。也就是itemsid

          使用list來接收

            形參中list的泛型跟jsp中的值的類型一緻,形參中參數名稱要和jsp中name一緻。(我們想象中是這樣)

            結果,會報錯,嘿嘿,因為不能在形參中直接定義List類型的參數,如果想要使用list來接收,需要把List類型的參數定義在包裝POJO中,Controller的方法形參使用該包裝POJO,下面講解。是以如果使用接收簡單類型的集合參數,使用數組最為友善。

        1.7.2、pojo類型的集合參數綁定,可以使用數組或者list來接收

          注意:pojo類型的集合參數綁定時,接收它的數組或者List,都不能直接定義在Controller方法形參上,需要把它定義到一個包裝pojo中,如何把這個包裝pojo放到形參

          使用list。

          包裝pojo類 ItemsQueryVo, 将需要裝items集合的對象放入包裝類中。

          這裡注意:标記的是name屬性,不要與value屬性搞混淆了,在ItemsQueryVo中有名為itemsList的list,是以在jsp中的name就需要一層層比對下去才能正确将其屬性值裝載到正确的位置,list的格式為:itemsList[下标].name。 就拿這個分析,itemsList就可以找打ItemsQueryVo中的itemsList, itemsList[1],就可以定位到itemsList中的第一個items,itemsList[1].name就可以定位到itemsList中的第一個items的name屬性,這樣一來就看得懂了。

          controller

        1.7.3、總結上面兩種

          總結一下集合參數的綁定

            對于簡單類型的集合參數綁定,則使用數組作為形參來接收請求的集合參數

            對于pojo類型的集合參數綁定,則使用數組或者list兩者都可以,一般常用list。

              注意:這種pojo類型的集合參數綁定,必須将list或者數組作為一個包裝類中的屬性,然後使用該包裝類對象作為形參來接收請求參數。       

        1.7.4、map集合類型綁定

          這個用的不多,一般隻是用list,這個也稍微了解一下,等需要的時候會用即可,貼出關鍵代碼就行

          同樣,需要使用包裝pojo類。

          ItemsQueryVo

          jsp:格式為下面這樣。就能夠比對到

    

二、總結

      看了這麼多中參數綁定的例子,我覺得用一句話來概括最為準确,萬變不離其宗。有耐心看一下就自然就會用了,真的很簡單。隻是知識比較多比較細,需要了解的也不多。