GWT验证i18n

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GWT验证i18n相关的知识,希望对你有一定的参考价值。

我希望以下可能有效:

@Size(min = 1, message = "{my.custom.message}")
private String name;

使用我的源路径中的ValidationMessages.properties,与我的其他文本资源一起使用:

my.custom.message=it is kinda short

......但约束违规仍然是{my.custom.message}

是否必须执行一些特殊操作才能获取ValidationMessages.properties文件?请记录在哪里?

显然它应该工作,不知何故:https://github.com/gwtproject/gwt/issues/5762

答案

感谢TBroyer's reply,我设法让它在我的项目中工作。

简而言之...

...定义MyCustomValidationMessages接口:

public interface MyCustomValidationMessages extends com.google.gwt.i18n.client.ConstantsWithLookup {
    @DefaultStringValue("NotNull constraint violated")
    @Key("notNull")
    String notNull();

    @DefaultStringValue("Size constraint violated")
    @Key("size")
    String size();
}

...在它旁边创建MyCustomValidationMessages.properties:

notNull=must not be null
size=must be at least {min} characters long

...定义MyCustomValidationMessagesResolver类并使其使用来自MyCustomValidationMessages接口的消息:

public class MyCustomValidationMessagesResolver extends AbstractValidationMessageResolver
        implements UserValidationMessagesResolver {
    public MyCustomValidationMessagesResolver() {
        super(GWT.create(MyCustomValidationMessages.class));
    }
}

...在您的AmazingModule.gwt.xml中,使用MyCustomValidationMessagesResolver覆盖UserValidationMessagesResolver:

<replace-with class="amazing.project.client.MyCustomValidationMessagesResolver">
    <when-type-is class="com.google.gwt.validation.client.UserValidationMessagesResolver"/>
</replace-with>

...在DTO bean中应用约束(注意大括号):

public class MyDto {
    @NotNull(message = "{notNull}")
    @Size(min = 1, message = "{size}")
    private String name;
}

瞧!

Working example is here.

如果您确定已完成所有操作并且它无法正常工作,请尝试删除GWT的临时文件夹并重新启动IDE。有时仅仅重建项目并重新启动代码服务器(在Idea中)可能还不够。 #PITA

以上是关于GWT验证i18n的主要内容,如果未能解决你的问题,请参考以下文章

在使用 JSR-303 验证表单时使用 I18n 消息

在 GWT-RPC 中将 ArrayList 作为参数发送

JSF2 i18n bean 验证消息

重定向时如何在 Safari 中保留 uri 片段?

带有 i18n 消息的 Spring-MVC + RESTeasy 表单 bean 验证 (JSR 303)

Spring security - 身份验证后的 GWT 重定向