1. 程式人生 > >SpringMVC框架(1)之(1.3 引數繫結)

SpringMVC框架(1)之(1.3 引數繫結)

引數繫結

一、繫結簡單型別引數:整型、字串、float/double、日期、布林(eg:Controller中方法 public String editItemsSubmit(String name,Float price))

(eg:4.2 editItems.jspname=“name /price /detail”;action="${pageContext.request.contextPath}/items/editItemsSubmit.action",提交到 editItemsSubmit;)
法一:public String editItemsSubmit( String name,Float price

) throws Exception;
法二: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

) throws Exception;
② itemsService.updateItems(id, itemsCustom );
【 類 ItemsCustom是類 Items的擴充套件類,包含 Items類所有屬性的 】。

(② 中要傳入引數是 itemsCustom,ItemsCustom類是 Item類擴充套件類(包含 Items類中所有屬性);所以方法中傳入引數是 ItemsCustom itemsCustom;
4.2 editItems.jspname=“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.jspname=“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.javapublic 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>