表单验证错误消息未按预期显示

时间:2017-02-16 14:33:47

标签: java spring forms validation spring-boot

<td th:if="${#fields.hasErrors('description')}" th:errors="*{description}" class="red">You must provide a reason for your request.</td>
<td th:if="${#fields.hasErrors('selectedDate')}" th:errors="*{selectedDate}" class="red">You must select a date.</td>

为什么这些td会被以下消息填充,而不是我上面提供的消息?他们也没有参加我提供的CSS课程。

may not be empty may not be empty

请求实体:

public class RequestModel {

    private Long requestId;

    @NotNull
    @NotBlank
    private String selectedDate;

    private RequestStatus requestStatus;

    @NotNull
    @NotBlank
    private String description;

    private Boolean hasForced;

    public String getSelectedDate() {
        return selectedDate;
    }

    public void setSelectedDate(String selectedDate) {
        this.selectedDate = selectedDate;
    }

    public Long getRequestId() {
        return requestId;
    }

    public void setRequestId(Long requestId) {
        this.requestId = requestId;
    }

    public RequestStatus getRequestStatus() {
        return requestStatus;
    }

    public void setRequestStatus(RequestStatus requestStatus) {
        this.requestStatus = requestStatus;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Boolean getHasForced() {
        return hasForced;
    }

    public void setHasForced(Boolean hasForced) {
        this.hasForced = hasForced;
    }
}

控制器:

@RequestMapping(value = "/save", method = RequestMethod.POST)
String saveRequest(Principal principal, @Valid @ModelAttribute(value = "requestModel") RequestModel requestModel, BindingResult bindingResult, RedirectAttributes redirectAttributes) {

        if (bindingResult.hasErrors()) {
            // log.info("There are binding errors.");
            return "send";
        }
    ...
    }

完整的HTML表单:

<form role="form" th:action="@{/request/save}" th:object="${requestModel}" method="post">
    <input type="checkbox" th:field="*{hasForced}" th:checked="${false}" style="display: none;"/>         
    <p><input id="description" class="descriptionField" type="text" th:field="*{description}"
              placeholder="Please provide a reason for your request"
              style="width: 500px; border-radius: 4px; padding: 11px 11px 11px 11px;"/></p>
    <input id="embeddedDateField" class="dateField" placeholder="YYYY-MM-DD" type="text" th:field="*{selectedDate}" readonly
           style="border-radius: 4px; background: #eefdff; text-align: center;"/><br>
    <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
    <div style="margin: 5px; width: 200px;"><input type="submit" value="Submit Request"
                                                   style="display: block;"></div>
    <td th:if="${#fields.hasErrors('description')}" th:errors="*{description}" class="red">You must provide a reason for your request.</td>
    <td th:if="${#fields.hasErrors('selectedDate')}" th:errors="*{selectedDate}" class="ed">You must select a date.</td>
</form>

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

这些消息来自验证注释默认值。要设置自己的,您需要提供如下所示,或者您可以使用MessageSource从属性文件更改。

@NotNull(message="You must select a date.")
@NotBlank(message="You must select a date.")
private String selectedDate;