簡體   English   中英

避免在更新時已經存在驗證並在Spring MVC中進行更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM