[英]Avoid already exists validation on update and do update in Spring MVC
我正在使用Spring MVC創建一個簡單的CRUD。 我正在使用相同的表格進行插入和編輯。 我創建了一個名稱字段驗證,以檢查該值是否已存在。 如何避免在編輯驗證時出現這種情況以及如何進行更新?
這是代碼
ItemController.java
@RequestMapping(method = RequestMethod.POST)
public String processForm( @Validated ItemForm itemForm, BindingResult result,
Map model) {
if (result.hasErrors()) {
model.put("typeList", dao.getItemTypes());
return "itemmaster";
}
dao.insertItems(itemForm);
return "redirect:dashboard";
}
這是jsp頁面
<form:form action="itemmaster.html" commandName="itemForm">
<table width="100%" border="0">
<tr>
<td width="7%">Name:</td>
<c:choose>
<c:when test="${not empty name}">
<td width="11%"><form:input path="nameUpdate" /></td><td width="82%"><form:errors cssStyle="color:red" path="nameUpdate"/></td>
</c:when>
<c:otherwise>
<td width="11%"><form:input path="name" /></td><td width="82%"><form:errors cssStyle="color:red" path="name"/></td>
</c:otherwise>
</c:choose>
</tr>
<td>Description:</td><td><form:textarea path="description" /></td><td width="13%"><form:errors path="description" cssStyle="color:red"/></td>
</tr>
<tr>
<td></td><td><input type="submit" value="Submit" /></td>
</tr>
</table>
</form:form>
提前致謝。
恕我直言,您不應在驗證器中進行重復測試。 您應該將形式驗證(帶有空字段和可接受格式的交易)與邏輯驗證分開。 第一部分僅取決於輸入值,后者可能取決於外部上下文(例如數據庫)。 自動驗證只應完成第一部分。
我的建議是:
在插入方法中添加重復測試
public String processForm( @Validated ItemForm itemForm, BindingResult result, Map model) { if (hasDuplicatedName(itemForm) { result.reject(DUPLICATE, "Name is already in use"); } if (result.hasErrors()) { model.put("typeList", dao.getItemTypes()); return "itemmaster"; } ...
您還可以通常使用事務划分:如果需要將數據庫讀取以進行測試,則不應在控制器中完成,而應在服務級別進行。 我經常將綁定結果傳遞給服務層(作為Error
)在此級別上進行邏輯測試 ,但仍然能夠稍后在視圖中顯示錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.