默認支持的參數(shù)類型
處理器形參中添加如下類型的參數(shù)處理適配器會默認識別并進行賦值切油。
1.HttpServletRequest
通過request對象獲取請求信息
2.HttpServletResponse
通過response處理響應信息
3.HttpSession
通過session對象得到session中存放的對象
4.Model/ModelMap
ModelMap是Model接口的實現(xiàn)類辫呻,通過Model或ModelMap向頁面?zhèn)鬟f數(shù)據(jù)
調(diào)用service查詢商品信息
Items item = itemService.findItemById(id);
model.addAttribute("item", item);
頁面通過${item.XXXX}獲取item對象的屬性值碱璃。
使用Model和ModelMap的效果一樣仑撞,如果直接使用Model煞聪,springmvc會實例化ModelMap悴品。
參數(shù)綁定介紹
注解適配器對RequestMapping標記的方法進行適配贷币,對方法中的形參會進行參數(shù)綁定怔匣,早期springmvc采用PropertyEditor(屬性編輯器)進行參數(shù)綁定將request請求的參數(shù)綁定到方法形參上握联,3.X之后springmvc就開始使用Converter進行參數(shù)綁定。
簡單類型
當請求的參數(shù)名稱和處理器形參名稱一致時會將請求參數(shù)與形參進行綁定每瞒。
整型
public String editItem(Model model,Integer id) throws Exception{
}```
字符串
單精度/雙精度
布爾型
public String editItem(Model model,Integer id,Boolean status) throws Exception
請求url:http://localhost:8080/springmvc_mybatis/item/editItem.action?id=2&status=false
說明:對于布爾類型的參數(shù)金闽,請求的參數(shù)值為true或false。
@RequestParam
使用@RequestParam常用于處理簡單類型的綁定剿骨。
value:參數(shù)名字代芜,即入?yún)⒌恼埱髤?shù)名字,如value=“item_id”表示請求的參數(shù)區(qū)中的名字為item_id的參數(shù)的值將傳入浓利;
required:是否必須挤庇,默認是true,表示請求中一定要有相應的參數(shù)贷掖,否則將報嫡秕;
defaultValue:默認值,表示如果請求中沒有同名參數(shù)時的默認值
public String editItem(@RequestParam(value="item_id",required=true) String id) {
}```
形參名稱為id苹威,但是這里使用value=" item_id"限定請求的參數(shù)名為item_id昆咽,所以頁面?zhèn)鬟f參數(shù)的名必須為item_id。
這里通過required=true限定item_id參數(shù)為必需傳遞,如果不傳遞則報400錯誤掷酗,可以使用defaultvalue設置默認值调违,即使required=true也可以不傳item_id參數(shù)值
pojo
簡單pojo
將pojo對象中的屬性名于傳遞進來的屬性名對應,如果傳進來的參數(shù)名稱和對象中的屬性名稱一致則將參數(shù)值設置在pojo對象中
頁面定義如下;
<input type="text" name="name"/>
<input type="text" name="price"/>
Contrller方法定義如下:
@RequestMapping("/editItemSubmit")
public String editItemSubmit(Items items)throws Exception{
System.out.println(items);```
請求的參數(shù)名稱和pojo的屬性名稱一致泻轰,會自動將請求參數(shù)賦值給pojo的屬性技肩。
包裝pojo
包裝對象定義如下:
Public class QueryVo {
private Items items;
}
頁面定義:
<input type="text" name="items.name" />
<input type="text" name="items.price" />
Controller方法定義如下:
public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{
System.out.println(queryVo.getItems());
自定義參數(shù)綁定
需求
根據(jù)業(yè)務需求自定義日期格式進行參數(shù)綁定。
Converter
自定義Converter
public class CustomDateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.parse(source);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}```
配置方式
<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>
<!-- conversionService -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 轉(zhuǎn)換器 -->
<property name="converters">
<list>
<bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/>
</list>
</property>
</bean>```
集合類
字符串數(shù)組
頁面定義如下:
頁面選中多個checkbox向controller方法傳遞
<input type="checkbox" name="item_id" value="001"/>
<input type="checkbox" name="item_id" value="002"/>
<input type="checkbox" name="item_id" value="002"/>
傳遞到controller方法中的格式是:001,002,003
Controller方法中可以用String[]接收浮声,定義如下:
public String deleteitem(String[] item_id)throws Exception{
System.out.println(item_id);
}```
List
List中存放對象亩鬼,并將定義的List放在包裝類中,action使用包裝對象接收阿蝶。
List中對象:
成績對象
Public class QueryVo {
Private List<Items> itemList;//商品列表
//get/set方法..
}```
包裝類中定義List對象,并添加get/set方法如下:
頁面定義如下:
<tr>
<td>
<input type="text" name=" itemsList[0].id" value="${item.id}"/>
</td>
<td>
<input type="text" name=" itemsList[0].name" value="${item.name }"/>
</td>
<td>
<input type="text" name=" itemsList[0].price" value="${item.price}"/>
</td>
</tr>
<tr>
<td>
<input type="text" name=" itemsList[1].id" value="${item.id}"/>
</td>
<td>
<input type="text" name=" itemsList[1].name" value="${item.name }"/>
</td>
<td>
<input type="text" name=" itemsList[1].price" value="${item.price}"/>
</td>
</tr>```
上邊的靜態(tài)代碼改為動態(tài)jsp代碼如下:
<c:forEach items="${itemsList }" var="item" varStatus="s">
<tr>
<td><input type="text" name="itemsList[${s.index }].name" value="${item.name }"/></td>
<td><input type="text" name="itemsList[${s.index }].price" value="${item.price }"/></td>
.....
.....
</tr>
</c:forEach>```
Contrller方法定義如下:
public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{
System.out.println(queryVo.getItemList());
}```
Map
在包裝類中定義Map對象黄绩,并添加get/set方法羡洁,action使用包裝對象接收。
包裝類中定義Map對象如下:
Public class QueryVo {
private Map<String, Object> itemInfo = new HashMap<String, Object>();
//get/set方法..
}```
頁面定義如下:
<tr>
<td>學生信息:</td>
<td>
姓名:<inputtype="text"name="itemInfo['name']"/>
年齡:<inputtype="text"name="itemInfo['price']"/>
.. .. ..
</td>
</tr>```
Contrller方法定義如下:
public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{
System.out.println(queryVo.getIteminfo());
}```