gpt4 book ai didi

java - 避免已存在的更新验证并在 Spring MVC 中进行更新

转载 作者:行者123 更新时间:2023-12-02 05:23:04 25 4
gpt4 key购买 nike

我正在使用 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>

提前致谢。

最佳答案

恕我直言,您不应该在 validator 中进行重复测试。您应该将正式验证(处理空字段和可接受的格式)与逻辑验证分开。第一部分仅取决于输入值,后者可能取决于外部上下文,例如数据库。自动验证中只应完成第一部分。

我的建议是:

  • 使用不同的 Controller 方法进行更新和插入
  • 从 validator 中删除重复的测试
  • 在插入方法中添加重复测试

    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";
    }
    ...

您还可以使用事务划分作为规则:如果您需要读取数据库进行测试,则不应在 Controller 中完成,而应在服务级别完成。我经常将绑定(bind)结果传递给服务层(作为 Error),以便在此级别进行逻辑测试,仍然能够稍后在 View 中显示错误

关于java - 避免已存在的更新验证并在 Spring MVC 中进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26332802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com