gpt4 book ai didi

java - 手动将 FieldError 添加到 bindingResult 时,Spring 表单输入值丢失

转载 作者:行者123 更新时间:2023-11-29 03:05:21 26 4
gpt4 key购买 nike

我在 Spring MVC 中有一个 Web Controller :

@RequestMapping("/")
public String create(@Valid @ModelAttribute Device device, BindingResult bindingResult) {
return getDefaultView();
}

jsp View :

<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>

假设我的 Device 类只有一个属性 name。我想验证它(示例长度 >= 5)

public class DeviceDTO {
@Size(min = 5)
String name;
//getter & setter..
}

运行此命令后,我在name 字段中输入字符串“abc”然后提交,表单将显示为: enter image description here

我们可以看到有旧值和错误信息。但在某些情况下,我想用我自己的标准手动验证(注释无法处理),我删除 @Size 注释并像这样更改我的 Controller :

@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 字段的旧值 enter image description here

但如果我直接使用${device.name},它仍然显示“abc”值。

最佳答案

试试下面的代码:

@RequestMapping("/")
public String create(@Valid @ModelAttribute Device device, BindingResult bindingResult) {
if(device.getName().length() < 6)
bindingResult.addError(new FieldError("device", "name",device.getName(), false, null, null, "custom error"));
return getDefaultView();
}

关于java - 手动将 FieldError 添加到 bindingResult 时,Spring 表单输入值丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503791/

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