1. 程式人生 > >springmvc一次接受多個複雜物件

springmvc一次接受多個複雜物件

       在這之前,遇到的客戶端與伺服器的引數傳輸都是單個物件,陣列、或基本資料型別,容易處理,springmvc可自動進行引數匹配。現在要一次性傳多個物件,如一次性修改多個User物件。

       看了很多資料,網上上可以通過將資料轉換成json方式,然後Controller直接以List接收,嘗試了但是不行。

       還有一種方式就是新建一個類,將要傳輸的複雜物件作為該類的屬性,在Controller端直接接收該物件。以下將對該方式舉例:

      jsp頁面:

 <form id="billNumberRuleUIForm"  method="post" novalidate="" role="form" class="form-horizontal"> 
  <div class="content-row"> 
  <div class="content-row">
      <div class="row"> 
        <div class="col-lg-10 col-sm-10 col-md-10">
            <button type="button" class="btn btn-primary" onclick="saveBillNumbers();">
                <span class="glyphicon glyphicon-floppy-saved"></span>儲存
            </button>
        </div> 
    </div>
    <div style="height: 150px;background: #D9EDF8;margin-top: 20px;">說明:</div>

        
        <p style="font-size: 20px;margin:30px 0px 5px 0px;">單據號設定</p>

        <div class="col-lg-12 col-sm-12 col-md-12">
        <table class="table table-bordered table-striped" style="text-align: center;">
          <thead>
            <tr>
              <th style="text-align: center;width:10%">單據號型別</th> 
              <th style="text-align: center;width:16%">單據字首</th>
              <th style="text-align: center;width:16%">日期格式</th>
              <th style="text-align: center;width:16%">序號位數</th>
              <th style="text-align: center;width:10%">重置間隔日期</th>
              <th style="text-align: center;width:22%">單據號預覽</th>
            </tr>
          </thead>
          <tbody id="tBillNumber">
          <c:forEach items="${conBillNumberRules}" var="billNumber" varStatus="status">
               <tr>
                   <input name="conBillNumberRules[${ status.index}].id"
  type="hidden" value="${billNumber.id }" >                    <td><label name="billName" >${billNumber.billName }</label></td>                    <td>                        <input name="conBillNumberRules[${ status.index}].prefix"  type="text"  value="${billNumber.prefix }" style="width:220px;height:32px;border-radius:5px;border:1px solid #DDDDDD;" >                    </td>                    <td>                        <select  name="conBillNumberRules[${ status.index}].dateFormat"
class="form-control" style="width:220px;border-radius:5px;border:1px solid #DDDDDD;">                         <option ${billNumber.dateFormat == "" ?"selected":"" }>無</option>                         <option ${billNumber.dateFormat == "yyyy" ?"selected":"" }>yyyy</option>                         <option ${billNumber.dateFormat == "yyyyMM" ?"selected":"" }>yyyyMM</option>                         <option ${billNumber.dateFormat == "yyyyMMdd" ?"selected":"" }>yyyyMMdd</option>                     </select>                    </td>                    <td>                        <select name="conBillNumberRules[${ status.index}].suffixBit"
class="form-control" style="width:220px;border-radius:5px;border:1px solid #DDDDDD;">                         <option  value="2"   ${billNumber.suffixBit == 2 ?"selected":"" }>二位</option>                         <option  value="3"   ${billNumber.suffixBit == 3 ?"selected":"" }>三位</option>                         <option  value="4"  ${billNumber.suffixBit == 4 ?"selected":"" }>四位</option>                         <option  value="5"  ${billNumber.suffixBit == 5 ?"selected":"" }>五位</option>                     </select>                    </td>                    <td>                        <input name="conBillNumberRules[${ status.index}].resetIntervalDay" type="text" value="${billNumber.resetIntervalDay }" style="width:100px;height:32px;border-radius:5px;border:1px solid #DDDDDD;" >                    </td>                    <td data="billNumberPre" class="text-danger">                            ${billNumber.prefix}                    </td>                </tr>            </c:forEach>           </tbody>         </table>     </div>          </div>     </div>    </form>
Controller:
/**
	 * 編輯單號
	 * @return
	 */
	@RequestMapping("/edit")
	@ResponseBody
	public Map<String, Object> edit(BillNumberDTO billNumberDTO){
		Map<String, Object> map = new HashMap<>();
		boolean result = billNumberRuleService.edit(billNumberDTO);
		map.put("message", result);
		return map;
	}
新建DTO類,BillNumberDTO,用於客戶端與伺服器之間資料傳輸:
public class BillNumberDTO {
	private List<ConBillNumberRule> conBillNumberRules;//多個單號物件

	public List<ConBillNumberRule> getConBillNumberRules() {
		return conBillNumberRules;
	}

	public void setConBillNumberRules(List<ConBillNumberRule> conBillNumberRules) {
		this.conBillNumberRules = conBillNumberRules;
	}
	
}

Controller中方法中的形參即新建的資料傳輸類;jsp頁面中要提交的表單資料,即name所對應的資料(紅色標出)與Controller形參pojo物件的屬性保持一致,同時對應list集合中物件的屬性。
通過以上方法Controller就可以成功的接收List物件集合。