gpt4 book ai didi

java - 带有 :errors tag 形式的 Spring JSR-303

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:50:51 26 4
gpt4 key购买 nike

我正在尝试使用 JSR-303 验证并在 jsp 页面中显示它的结果。这是显示错误的 jsp 页面代码片段:

<c:set var="Error">
<form:errors path="name"/>
</c:set>
...
<spring:transform value="${Error}"/>

在 Controller 中我有以下内容:

@PostMapping(params = "next")
public String next(@Valid @ModelAttribute(COMMAND_NAME) final ProjectNewDetailsCommand cmd,
final Errors errors,
final Model model,
final HttpServletRequest request) {

首先,对我有用的解决方案是编写自定义 Validator 类:

@Override
public void validate(Object o, Errors errors) {
errors.pushNestedPath("project");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "error.project.creation.name.required");
errors.popNestedPath();
}

在这种情况下,来自 messages.properties 的适当消息被应用并显示在 UI 上:

error.project.creation.name.required=The name must not be blank.

这是我使用 JSR-303 注解的另一种情况:

public class Project {

...
@Size(max = 100, message = "error.project.creation.size")
private String name;

messages.properties 中,键 error.project.creation.size 下有消息,我还尝试使用键 Size 添加消息.command.project.name 正如某些来源中所述。 Error Controller 中的对象也不为空并且包含验证错误。但是,当我将此方法与 JSR-303 一起使用时,出现以下错误:

Caused by: javax.servlet.jsp.JspTagException: No message found under code 'Size' for locale 'en_US'.
at org.springframework.web.servlet.tags.MessageTag.doEndTag(MessageTag.java:200)

这意味着出于某种原因 Spring 尝试应用 Size 错误代码而不是 error.project.creation.size Size.command.project.name.知道为什么会发生这种情况以及如何解决这个问题吗?

最佳答案

终于找到了问题的根源。在渲染警报的代码中,有一个 spring:message 标签:

<spring:message code="${error.code}" arguments="${error.arguments}"/>

If 以下列方式工作:它从 Errors 类中的 codes 数组中查找最后的代码(参见 DefaultMessageSourceResolvable.getCode 方法),这就是它不能的原因找到 Size 消息,但没有找到由 hibernate validator 或自定义 validator 创建的 defaultMessage

在这种情况下,简单的解决方法是添加 text 属性:

<spring:message code="${error.code}" arguments="${error.arguments}" text="${error.defaultMessage}"/>

关于java - 带有 :errors tag 形式的 Spring JSR-303,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43093120/

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