2016-12-26 25 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()調用解決它。