2016-12-26 52 views
0

我尝试在Vaadin Spring Boot中使用BeanFieldGroup<Entity>javax.validator和Hibernate验证程序。Vaadin&Spring Boot - 未找到ValidationMessages.properties中的替代翻译

@NotBlank(message = "{may.not.null}") 
@Column(name = "name", unique = true) 
private String name; 

,我创建了两个文件:ValidationMessages_en.properties

may.not.null=not null 

ValidationMessages_fr.properties

may.not.null=non null 

但是,即使当我改变了语言为法语,验证消息仍是ValidationMessages_en.properties

请问您对此有任何想法吗?

回答

0

BeanFieldGroup使用语言环境创建BeanValidator,该语言环境设置为正在验证的组件。你的问题没有提及如何创建为name属性的文本字段,但是让我们假设你创建这样说:

TextField nameTextField = new TextField("Name"); 

这里最重要的因素是确保该nameTextField有正确的语言环境前您将属性与BeanFieldGroup绑定(您可以使用nameTextField.getLocale()检查区域设置)。

所以,尽量配置您的文本字段来使用会话语言环境是这样的:

nameTextField.setLocale(UI.getCurrent().getLocale()); 

这段代码利用区域从请求(“接受语言”请求头),并把它设置为字段 - >BeanFieldGroup然后将创建具有正确语言环境的BeanValidators,并将验证消息本地化(这发生在BeanFieldGroup#configureField)。

但是,仅使用此代码来检查问题是否仅限于您的文本字段没有正确的语言环境。这并不意味着你必须为每个领域设置Locale ...这是因为在Vaadin(至少在Vaadin 7中)会话(基于请求的)Locale应该由父级的组件继承。因此,如果将TextField添加到布局,则TextField会继承布局的语言环境,布局会从视图继承它,等等(一直到UI.getCurrent().getLocale() - 请检查您是否有所需的语言环境)。由于addComponent()在通话过程中继承发生,这是我的猜测,即,也许,你的情况,这将是足以调用addComponent()方法(在其中添加了文本字段的布局),你实际使用的BeanFieldGroup前捆绑。 Remember to set the Locale

注:

你的问题在这里更多的信息,我试过现在编写您的问题,我面临同样的问题,因为你必须通过移动BeanFieldGroup前addComponent()调用解决它。