【发布时间】:2025-12-29 18:45:12
【问题描述】:
我在 Spring MVC 中有一个 Web 控制器:
@RequestMapping("/")
public String create(@Valid @ModelAttribute Device device, BindingResult bindingResult) {
return getDefaultView();
}
jsp视图:
<form:form role="form" commandName="device">
<form:input path="name" class="form-control"/>
<form:errors path="name" cssClass="text-danger"/>
<button type="submit">Submit</button>
</form:form>
假设我的设备类只有一个属性name。我想验证它(例如长度 >= 5)
public class DeviceDTO {
@Size(min = 5)
String name;
//getter & setter..
}
运行后,我在name字段中输入字符串“abc”然后提交,表单将显示为:
我们可以看到有旧值和错误消息。但在某些情况下,我想使用自己的标准手动验证(该注释无法处理),我删除 @Size 注释并像这样更改我的控制器:
@RequestMapping("/")
public String create(@Valid @ModelAttribute Device device, BindingResult bindingResult) {
if(device.getName().length() < 6)
bindingResult.addError(new FieldError("device", "name", "custom error"));
return getDefaultView();
}
但是现在,当我提交带有“abc”值的表单时,会显示我的自定义错误,但我的 name 字段的旧值没有
但如果我直接使用${device.name},它仍然显示“abc”值。
【问题讨论】:
标签: java spring jsp spring-mvc spring-form