springmvc一次接受多個複雜物件
阿新 • • 發佈:2019-01-24
在這之前,遇到的客戶端與伺服器的引數傳輸都是單個物件,陣列、或基本資料型別,容易處理,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物件集合。