簡體   English   中英

當將FieldError手動添加到bindingResult中時,Spring表單輸入值會丟失

[英]Spring form input value get lost when manually add FieldError into bindingResult

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

假設我的Device類只有一個屬性名稱 我要驗證它(示例長度> = 5)

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

運行此命令后,我在名稱字段中輸入字符串“ 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”值的表單時,會顯示我的自定義錯誤,但不會顯示名稱字段的舊值 在此處輸入圖片說明

但是,如果我直接使用$ {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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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