springmvc 中的data bind機制

1、使用@RequestParam將請求參數綁定至方法參數java

使用這種方法,沒必要要求請求的參數名和形參名保持一致。而且,若是參數使用了該註解,則該參數默認是必須提供的(頁面必須保證此值存在),但你也能夠把該參數標註爲非必須的:只須要將@RequestParam註解的required屬性設置爲false便可(好比,@RequestParam(value="id", required=false))。spring

@Controller
@RequestMapping("/pets")
@SessionAttributes("pet")
public class EditPetForm {
    // ...
    @RequestMapping(method = RequestMapping.GET)
    public String setupForm(@RequestParam("petId") int petId, ModelMap model) {
        Pet pet = this.clinic.loadPet(petId);
        model.addAttribute("pet", pet);
        return "petForm";
    }

    // ,..
}

2、Stirng 類型的參數綁定數組

  1. Http請求傳遞的數據都是字符串String類型的
  2. 屬性編輯器(PropertyEditor)能夠將string 類型轉換成咱們須要的java對象( 經過使用setAsText方法)。
  3. 咱們能夠自定義PropertyEditor,只要繼承PropertyEditorSupport類並重寫setAsText方法就能夠。 Spring中有不少自定義的屬性編輯器,都在spring-beans jar包下的org.springframework.beans.propertyeditors包裏。

3、數組參數的綁定app

  1. 需求 商品的批量刪除,用戶能夠選擇多個商品,批量刪除。
  2. 表現層的實現 關鍵:將頁面選擇的商品id --> controller方法形參中; 方法形參使用數組( items_id)接收頁面的請求的多個商品id.

頁面定義:編輯器

<script language="JavaScript">
        <%-- 提交表單 --%>
        function deleteItems() {
            document.itemsForm.action = "${pageContext.request.contextPath }/items/deleteItems.action";
            document.itemsForm.submit();
        }
        function queryItems() {
            document.itemsForm.action = "${pageContext.request.contextPath }/items/queryItems.action";
            document.itemsForm.submit();
        }
</script>

<td><input type="button" value="批量刪除" onclick="deleteItems()"/></td>

<%--多選框 --%>
<td><input type="checkbox" name="items_id" value="${item.id}"/></td>

controller方法定義:ui

@RequestMapping("deleteItems")
public String deleteItems(Integer[] items_id) {


      //調用service批量刪除商品
      return "success";
}

4、List 參數的綁定this

需求:批量提交數據時,將提交的數據綁定到List<pojo> 中 ,好比:成績錄入(批量提交) 本例子需求,批量修改,在頁面輸入多個商品的信息,將多個商品提交到controller方法中..net

表現層:controller方法定義: 1.進入商品修改界面(樣式,參考商品列表實現 2. 批量修改提交 3. 既然頁面沒有list屬性.能夠本身在pojo中設置一個List實例變量,並提供getter、setter方法 4. 那麼,就能夠經過包裝pojo接收,頁面傳給List實例變量的數據。頁面傳來的每一個數據都是list的元素(每一個屬性都用一個對象來包裝),並在遍歷時以其varStatus的值來標識下標.code

頁面orm

<script language="JavaScript">
        <%-- 提交表單 --%>
        function editItemsAll() {
            document.itemsForm.action = "${pageContext.request.contextPath }/items/editItemsAll.action";
            document.itemsForm.submit();
        }
        function editItemsQuery() {
            document.itemsForm.action = "${pageContext.request.contextPath }/items/editItemsQuery.action";
            document.itemsForm.submit();
        }
</script>

<td><input type="button" value="查詢" onclick="editItemsQuery()"/></td>
<td><input type="button" value="批量修改提交" onclick="editItemsAll()"/></td>

<!--商品列表-->
<table width="100%" border=1>
      <tr>
          <td>商品名稱</td>
          <td>商品價格</td>
          <td>生產日期</td>
          <td>商品描述</td>
          <td>操做</td>
      </tr>
      <c:forEach items="${itemsList }" var="item" varStatus="status">
          <tr>
              <td><input name="itemsCustomList[${status.index}].name" value="${item.name }"/></td>
              <td><input name="itemsCustomList[${status.index}].price" value="${item.price }"/></td>
              <td><input name="itemsCustomList[${status.index}].createtime"
                         value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
              <td><input name="itemsCustomList[${status.index}].detail" value="${item.detail }"/></td>
          </tr>
      </c:forEach>
</table>

controller方法:

//批量修改顯示頁面
@RequestMapping("/editItemsQuery")
public String editItemsQuery(Model model, ItemsQueryVo itemsQueryVo) throws Exception {

      List<ItemsCustom> itemsList = itemsService.findItemsList(itemsQueryVo);
      model.addAttribute("itemsList", itemsList);

      return "items/editItemsQuery";
}

//修改提交頁面
@RequestMapping("/editItemsAll")
public String editItemsAll(ItemsQueryVo itemsQueryVo) {

      //注入service操做
        
      return "success";
}

5、map 參數的綁定

map 與list相似.

相關文章
相關標籤/搜索