Spring MVC資料繫結 複雜資料繫結

2021-08-18 16:17:39 字數 3544 閱讀 8472

接上篇spring mvc資料繫結(簡單資料繫結)

1>繫結包裝pojo

所謂的包裝pojo,就是在乙個pojo中包含另乙個簡單pojo。

例如,在訂單物件中包含使用者物件。這樣在使用時,就可以通過訂單查詢到使用者資訊。

1.在po包下新建乙個orderspojo:

public class orders
2.新建乙個orderscontroller,編寫以下兩個方法:

@controller

public class orderscontroller

public string findorderswithuser(orders orders)

}

3.新建乙個查詢頁面orders.jsp:

在使用包裝pojo型別資料繫結時,前端請求的引數名編寫必須符合以下兩種情況。

(1)如果查詢條件引數是包裝類的直接基本屬性,則引數名直接用對應的屬性名,如上面**中的ordersid。

(2)如果查詢條件是包裝型別中pojo的子屬性,則引數名必須為[物件.屬性],其中[物件]要和包裝pojo中的物件屬性名稱一致,[屬性]要和包裝pojo中的物件子屬性一致,如上述**中的user.username。

執行結果如下:

2>自定義資料繫結

一般情況下,使用基本資料型別和pojo型別的引數資料已經能夠滿足需求,然而有些特殊型別的引數是無法在後台進行直接轉換的,但也有特殊資料型別無法直接進行資料繫結,必須先經過資料轉換,例如日期資料。針對前面提到的特殊資料型別,就需要開發者自定義轉換器(converter)或格式化(formatter)來進行資料繫結。

converter:

spring框架提供了乙個converter用於將一種型別的物件轉換為另一種型別的物件。

自定義converter類需要實現org.springframework.core.convert.converter.converter介面。

1.介面**如下:

public inte***ce converter
上述**中,泛型中的s表示源型別,t表示目標型別,而convert(s source)表示介面中的方法。

在專案中建立乙個convert的包,並建立乙個日期轉換類dateconverter,用於將string型別轉換成date型別.

2.dateconverter**如下所示:

public class dateconverter implements converter catch (parseexception e) }}

3.修改springmvc-config.xml檔案,新增id為conversionservice的bean。

4.在controller包中新建乙個日期控制器類dateconroller.

@controller

public class datecontroller

}

訪問方式如下(時間要自己手動輸入)

執行結果如下:

formatter:

formatter與converter的作用相同,只是formatter的源型別必須是乙個string型別,而converter可以是任意型別。

使用formatter自定義轉換器類需要實現org.springframework.format.formatter介面。介面**如下:

public inte***ce formatterextends printer, parser

formatter介面繼承了printer和parser介面,其泛型t表示輸入字串要轉換的目標型別。在printer和parser介面中,分別包含乙個print()和parse()方法,所有的實現類必須覆蓋這兩個方法。

1.在converter包中新建乙個日期轉換類dateformatter,**如下:

public class dateformatter implements formatter

@override

public string print(date date, locale locale)

}

2.在配置檔案中註冊:

執行結果和converter的一樣.

3>複雜資料繫結:

(1)繫結陣列在實際開發時,可能會遇到前端請求需要傳遞到後台乙個或多個相同名稱引數的情況(如批量刪除),此種情況採用前面講解的簡單資料繫結的方式顯然是不合適的。

針對上述這種情況,如果將所有同種型別的請求引數封裝到乙個陣列中,後台就可以進行繫結接收了。

接下來,以乙個批量刪除使用者的例子來詳細講解繫結陣列的操作使用:

1.新建乙個user.jsp頁面

2.在usercontroller中新增方法

public string selectusers()

public string deleteusers(integer ids)

} else

return "success";

}執行結果如下:

4>繫結集合:

在批量刪除使用者的操作中,前端請求傳遞的都是同名引數的使用者id,只要在後台使用同一種陣列型別的引數繫結接收,就可以在方法中通過迴圈陣列引數的方式來完成刪除操作。

但如果是批量修改使用者操作的話,前端請求傳遞過來的資料可能就會批量包含各種型別的資料,如integer,string等。

針對上述這種情況,就可以使用集合資料繫結。即在包裝類中定義乙個包含使用者資訊類的集合,然後在接收方法中將引數型別定義為該包裝類的集合。

1.新建乙個包vo,並建立uservo來封裝使用者集合的屬性,**如下:

public class uservo 

public void setusers(listusers)

}

2.在usercontroller中新增方法:

public string touseredit()

public string editusers(uservo userlist)

}return "success";

}在使用集合資料繫結時,後台方法中不支援直接使用集合形參進行資料繫結,所以需要使用包裝pojo作為形參,然後在包裝pojo中包裝乙個集合屬性.

3.新建乙個user_edit.jsp頁面

執行結果如下:

(參考自<

springMVC資料繫結

1.資料繫結的定義 2.常用的資料繫結型別 3.具體使用方法 在搭建好springmvc環境下新增註解 requestparam value 表單對應的name 即可完成資料繫結 package com.yzy.controller import com.yzy.entity.course impo...

SpringMVC資料繫結流程

1.spring mvc 框架將 servletrequest 物件及目標方法的入參例項傳遞給 webdatabinde ctory 例項,以建立 databinder 例項物件 2.databinder 呼叫裝配在 spring mvc 上下文中的conversionservice 元件進行資料型...

SpringMVC資料繫結原理

什麼是資料繫結?這個引數非常重要。web專案其實就是客戶端跟伺服器之間的互動,客戶端傳送請求,伺服器對請求做出響應。客戶端傳送請求的時候,是需要攜帶引數過來的。比如查詢課程的詳細資訊,前台就會將課程的id傳給後台,後台通過id在資料庫裡面檢索出該門課程的所有的詳細資訊,然後把這個結果集封裝成乙個模型...