Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBoot在BindingResult中本地化错误消息_Java_Spring_Spring Boot_Localization_Thymeleaf - Fatal编程技术网

Java SpringBoot在BindingResult中本地化错误消息

Java SpringBoot在BindingResult中本地化错误消息,java,spring,spring-boot,localization,thymeleaf,Java,Spring,Spring Boot,Localization,Thymeleaf,我试图找出如何在spring boot中本地化错误消息。理想的方法是在如下错误中设置本地化消息名称: @RequestMapping public ModelAndView index(@Valid SomeDto dto, BindingResult result) { //... result.addError(new FieldError("field1","messages.field1.error1")); //... } //... public clas

我试图找出如何在spring boot中本地化错误消息。理想的方法是在如下错误中设置本地化消息名称:

@RequestMapping
public ModelAndView index(@Valid SomeDto dto, BindingResult result) {
    //...
    result.addError(new FieldError("field1","messages.field1.error1"));
    //...
}

//...

public class SomeDto {

    @Size(min = 3, message = "messages.field.error2")
    private String field1;
}

然后处理响应过滤器中的字段,或者以某种方式解析thymeleaf模板中的消息。

好的,我在thymeleaf中找到了一种方法:

<div th:if="${#fields.hasErrors('field1')}"
     th:each="e : ${#fields.errors('field1')}" th:text="#{${e}}" >
</div>


不过,这可能不是最优雅的方式。

好的,我在thymeleaf中找到了一种方法:

<div th:if="${#fields.hasErrors('field1')}"
     th:each="e : ${#fields.errors('field1')}" th:text="#{${e}}" >
</div>


然而,这可能不是最优雅的方式。

“然而,这可能不是最优雅的方式。”

事实上,你很接近“优雅的方式”。不要使用:
th:text=“#{${e}}”
只需使用
th:text=“${e}”
。但当然,这不会显示本地化消息。要显示本地化消息,您需要将其添加到
消息\u en.properties
(或任何您的区域设置)文件中:

因此,该模式基本上是:验证注释的名称后跟模型属性实例的名称,该名称后跟字段的名称
{2}
表示
min
注释属性值,
{1}
表示
max
。它将显示本地化消息“开箱即用”

另外,你不需要这条线:

result.addError(new FieldError("field1","messages.field1.error1"));
“然而,这可能不是最优雅的方式。”

事实上,你很接近“优雅的方式”。不要使用:
th:text=“#{${e}}”
只需使用
th:text=“${e}”
。但当然,这不会显示本地化消息。要显示本地化消息,您需要将其添加到
消息\u en.properties
(或任何您的区域设置)文件中:

因此,该模式基本上是:验证注释的名称后跟模型属性实例的名称,该名称后跟字段的名称
{2}
表示
min
注释属性值,
{1}
表示
max
。它将显示本地化消息“开箱即用”

另外,你不需要这条线:

result.addError(new FieldError("field1","messages.field1.error1"));

@亚历克斯:我觉得这篇文章没有什么帮助。请注意,本地化设置不是问题。你是对的,我误解了你的问题!这应该已经是现成的了。
FieldError
是一个
DefaultMessageSourceResolvable
,它将被传递给已配置的
MessageSource
。您需要做的唯一一件事是确保错误代码
messages.field1.error1
在您的
messages.[locale].properties中可用。如果你的设置不符合要求,那么你的设置就是有缺陷的。@Alex我在这篇文章中看不到任何有用的东西。请注意,本地化设置不是问题。你是对的,我误解了你的问题!这应该已经是现成的了。
FieldError
是一个
DefaultMessageSourceResolvable
,它将被传递给已配置的
MessageSource
。您需要做的唯一一件事是确保错误代码
messages.field1.error1
在您的
messages.[locale].properties中可用。如果这不符合开箱即用的原则,那么您的设置就是有缺陷的。我添加了
result.addError(newfielderror(“field1”,“messages.field1.error1”)显示我还需要手动处理一些错误,并以相同的方式显示区域设置消息。如何使用此模式显示控制器验证中的错误?我添加了
result.addError(新的FieldError(“field1”,“messages.field1.error1”)显示我还需要手动处理一些错误,并以相同的方式显示区域设置消息。如何使用此模式显示控制器验证中的错误?