将本地化的显示名称添加到约束违规消息中?

时间:2013-01-10 13:40:38

标签: validation gwt

我们正在2.5中使用新的GWT验证库。

我们正在向屏幕添加一个汇总的违规列表。此列表必须显示本地化的字段名称。

@MyNotNull(foo= "Stage")
public String getStage();

需要显示本地化消息

“舞台是必填字段”

MyValidationMessages.properties中的消息为

  

{foo}是必填字段

请注意,注释不允许将非常量值分配给属性。所以我们必须在设计时以某种方式获取语言环境值:/

这不起作用

@MyNotNull(foo = injector.getLocale().errorMessage()) 
public String errorMessage()

如何使用localeKey在区域设置文件中查找区域设置,因为属性需要常量?

1 个答案:

答案 0 :(得分:0)

解决方案是

  • 添加类似FieldLocale.properties的内容,这是一个常量查找
  • 为注释添加属性,例如localeKey
  • 迭代您的ConstraintViolation集合
  • 使用以下内容获取属性值
  • 在FieldLocale.properties文件中查找本地化值
  • 复制违规并将邮件更改为本地化版本

    protected String getAttributeValue(ConstraintViolation violation,String key){         ConstraintDescriptor descriptor = violation.getConstraintDescriptor();

        if (descriptor.getAttributes().containsKey(key))
            return (String) descriptor.getAttributes().get(key);
    
        return null;
    }
    
    protected ConstraintViolation<T> copyMessage(ConstraintViolation<T> violation, String message) {
        return ConstraintViolationImpl.<T> builder() //
                .setConstraintDescriptor(violation.getConstraintDescriptor()) //
                .setInvalidValue(violation.getInvalidValue()) //
                .setLeafBean(violation.getLeafBean()) //
                .setMessage(message) //
                .setMessageTemplate(violation.getMessageTemplate()) //
                .setPropertyPath(violation.getPropertyPath()) //
                .setRootBean(violation.getRootBean()) //
                .setRootBeanClass(violation.getRootBeanClass()) //
                .build();
    }