1

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

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

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

本地化消息需要显示

“阶段是必填字段”

MyValidationMessages.properties 中的消息读取

{foo} 是必填字段

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

这行不通

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

我如何使用 localeKey 在语言环境文件中查找语言环境,因为该属性需要一个常量?

4

1 回答 1

0

The solution is to

  • add something like FieldLocale.properties this is a constants lookup
  • Add an attribute to your annotation like localeKey
  • Iterate your ConstraintViolation collection
  • Use something like the below to get the attribute value
  • Look up the localized value in your FieldLocale.properties file
  • Copy the violation and change the message to the localized version

    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();
    }
    
于 2013-02-08T19:51:20.600 回答