SpringMVC框架(1)之(1.3 引數繫結)
引數繫結
一、繫結簡單型別引數:整型、字串、float/double、日期、布林(eg:Controller中方法 public String editItemsSubmit(String name,Float price))
(eg:4.2 editItems.jsp 中 name=“name /price /detail”;action="${pageContext.request.contextPath}/items/editItemsSubmit.action",提交到 editItemsSubmit;)
法一:public String editItemsSubmit( String name,Float price
法二:public String editItemsSubmit( Items items ) throws Exception;
二、繫結簡單POJO型別:(eg:Controller中方法 public String editItemsSubmit( ItemsCustom itemsCustom)將一、中簡單型別引數換成對應的 pojo型別);
簡單POJO即只包含簡單型別的屬性;
繫結過程:request 請求引數名稱和 POJo類屬性名一致,可以自動繫結;
① public String editItemsSubmit(Integer id, ItemsCustom itemsCustom
② itemsService.updateItems(id, itemsCustom );
【 類 ItemsCustom是類 Items的擴充套件類,包含 Items類所有屬性的 】。
(② 中要傳入引數是 itemsCustom,ItemsCustom類是 Item類擴充套件類(包含 Items類中所有屬性);所以方法中傳入引數是 ItemsCustom itemsCustom;
4.2 editItems.jsp 中 name=“id / name / price / detail”;value="$ {item.id}、$ {item.name}、$ {item.price}、$ {item.detail}" )
三、繫結包裝型別:包裝型別 ItemsQueryVo 中包含 ItemsCustom itemsCustom類(eg:jsp 頁面中 name=“itemsCustom.price”)
① public String editItemsSubmit(Integer id,ItemsCustom itemsCustom, ItemsQueryVo itemsQueryVo ) throws Exception;
② itemsService.updateItems(id, itemsCustom );
【 包裝類 ItemsQueryVo包含 ItemsCustom類,所以 jsp頁面中 name=被包含的屬性.XX即 request 請求引數名稱(name=ItemsCustom.XX)和 POJO類屬性名(ItemsCustom)一致 】。
4.2 editItems.jsp 中 name=“itemsCustom.id / itemsCustom.name / itemsCustom.price /itemsCustom.detail”;value="$ {item.id}、$ {item.name}、$ {item.price}、$ {item.detail}" )
4.2 editItems.jsp
<body>
<form action="${pageContext.request.contextPath}/items/editItemsSubmit.action" method="post">
<input type="hidden" name="id、itemsCustom.id" value="${item.id}"/>
<table>
<tr><td>商品名稱:</td>
<td><input type="text" name="name、itemsCustom.name" value="${item.name}"></td></tr>
<tr><td>商品價格:</td>
<td><input type="text" name="price、itemsCustom.price" value="${item.price}"></td></tr>
<tr><td>商品描述:</td>
<td><input type="text" name="detail、itemsCustom.detail" value="${item.detail}"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="提交"/></td></tr>
</table>
</form>
</body>
3.1 ItemsController.java
@Controller
@RequestMapping("/items")
public class ItemsController{
@Autowired
private ItemsService itemsService;
/* @RequestMapping("/editItemsSubmit")
public String editItemsSubmit(Items items) throws Exception{
return "forward:queryItems.action";
} */
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(Integer id,ItemsCustom itemsCustom,ItemsQueryVo itemsQueryVo) throws Exception{
itemsService.updateItems(id,itemsCustom);
return "forward:queryItems.action";
}
}
四、陣列型別繫結
JSP頁面中提交的控制元件的 name值 要與Controller 方法中引數名 一致(傳遞引數過來);
需求:使用者選擇批量刪除商品
(點選 4.1 itemsList.jsp 中“批量刪除”按鈕時,呼叫< script>中的 deleteItems()方法,方法的 action的 URL(即…/items /deleteItems.action)指向 4.2 ItemsController.java 中 @RequestMapping("/deleteItems")方法; 4.1 itemsList.jsp 中
<td><input type="checkbox" name="delete_id" value="${item.id}"/> ${item.name}</td>
的 name="delete_id"與 4.2 ItemsController.java 中 public String deleteItems(Integer[] delete_id)
方法中的引數 ( Integer[ ] delete_id ) 保持一致,即從 jsp頁面提交後傳參到 Controller;
4.1 itemsList.jsp
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<head>
<script type="text/javascript">
function deleteItems(){
document.itemsForm.action="${pageContext.request.contextPath}/items/deleteItems.action";
document.itemsForm.submit();
}
</script>
</head>
<body>
<form name="itemsForm" action="">
<table width="100%" border="1">
<tr><td><input type="button" value="查詢"/>
<input type="button" value="批量刪除" onclick="deleteItems()" />
</td>
<td colspan="3">
<select>
<c:forEach items="${itemsType}" var="itemsType">
<option value="${itemsType.key}">${itemsType.value}</option>
</c:forEach>
</select>
</td></tr>
<tr><td>商品名稱</td><td>商品價格</td><td>訂購日期</td><td>商品描述</td><td>操作</td></tr>
<c:forEach items="${items}" var="item">
<tr><td><input type="checkbox" name="delete_id" value="${item.id}"/> ${item.name}
</td>
<td>${item.price}</td>
<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd"/></td>
<td>${item.detail}</td>
<td>
<a href="${pageContext.request.contextPath}/items/editItems.action?id=${item.id}">修改</a>
</td>
</tr>
</c:forEach>
</table>
</form>
</body>
4.2 ItemsController.java
@Controller
@RequestMapping("/items")
public class ItemsController{
@RequestMapping("/deleteItems")
public String deleteItems(Integer[] delete_id) throws Exception{
//刪除
return "success";
}
}
4.3 success.jsp
<body>
Success!
</body>
五、List集合型別繫結
Controller類的方法中形參使用包裝類,包裝類中包含 JSP頁面中要使用到的 list集合的屬性名;(eg: 包裝類中集合itemsList,JSP頁面顯示的 name值:itemsList [ $ {s.index}].name);(即 5.2 ItemsController.java中方法public String updateItemsList(ItemsQueryVo itemsQueryVo) throws Exception
使用包裝類 ItemsQueryVo,包裝類中包含private List<ItemsCustom> itemsList;
的 itemsList集合屬性,所以 5.1 editItemsList.jsp可使用name="itemsList[${s.index}].name"
進行 itemsList的遍歷;)
需求:批量修改商品資訊:進入批量修改頁面,填寫資料,提交;
(5.1 editItemsList.jsp 中顯示商品時 <td><input type="text" name="" value="${item.name}"></td>
中 name的值是 “itemsList[0].name” ,所以 5.2 ItemsController.java 中方法public String updateItemsList(ItemsQueryVo itemsQueryVo) throws Exception
的引數是 ItemsQueryVo 包裝類(ItemsQueryVo 類中含有 ItemsCustom屬性,再新增 private List<ItemsCustom> itemsList
itemsList集合,ItemsCustom類是 Items類的擴充套件類包含 Items類的所有欄位); 5.1 editItemsList.jsp 頁面中的< c:forEach>標籤新增 varStatus屬性,則<input type="text" name="itemsList[${s.index}].name" value="${item.name}">
中name可以使用 varStatus值的下表進行表示;)
5.1 editItemsList.jsp
<head>
<script type="text/javascript">
function updateItems(){
document.itemsForm.action="${pageContext.request.contextPath}/items/updateItems.action";
document.itemsForm.submit();
}
</script>
</head>
<body>
<form>
<table width="100%" border="1">
<tr><td><td><input type="button" value="查詢"/>
<input type="button" value="批量修改" onclick="updateItems()" />
</td>
<td colspan="3">
<select>
<c:forEach items="${itemsType}" var="itemsType">
<option value="${itemsType.key}">${itemsType.value}</option>
</c:forEach>
</select>
</td></tr>
<tr><td>商品名稱</td><td>商品價格</td><td>訂購日期</td><td>商品描述</td><td>操作</td></tr>
items="${items}" 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>
<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd"/></td>
<td>${item.detail}</td>
<td>
<a href="${pageContext.request.contextPath}/items/editItems.action?id=${item.id}">修改</a>
</td>
</tr>
</c:forEach>
</table>
</form>
</body>
5.2 ItemsController.java
@Controller
@RequestMapping("/items")
public class ItemsController{
@Autowired
private ItemsService itemsService;
@RequestMapping("/editItemsList")
public ModelAndView editItems() throws Exception{
List<ItemsCustom> itemList=itemsService.findItemsList(null);
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("items",itemsList);//jsp頁面拿到items
modelAndView.setViewName("editItemsList");
return modelAndView;
}
//批量修改
@RequestMapping("/updateItemsList")
public String updateItemsList(ItemsQueryVo itemsQueryVo) throws Exception{
return "success";
}
}
5.3 ItemsQueryVo .java
public class ItemsQueryVo{
private ItemsCustom itemsCustom;
private List<ItemsCustom> itemsList;
set、get();
}
5.4 success.jsp
<body>
Success!
</body>