【发布时间】:2011-02-28 11:35:45
【问题描述】:
我有枚举:
public enum Animal {
DOG,
CAT,
BIRD,
HORSE,
COW;
}
和列表,我有这些动物:
[ Animal.DOG,Animal.CAT, Animal.COW, 动物.狗]
我创建了特殊的注释类型来验证这个列表:
@AnimalListConstaint
我还在属性文件(animal_en.properties)中本地化了参数化消息:
my.localized.message.for.animal.unique = "列表中的动物 {0} 不是唯一的" my.localized.message.for.animal.enemies= “动物 {0} 和 {1} 不能在 名单,因为他们是敌人”
我的验证器应该检查这两个条件:
- 我的列表是唯一的吗?
- 在我的名单上是敌对动物(例如猫和狗)
所以我写了验证方法(我的类实现了ConstraintValidator):
public boolean isValid(final List<Animal> animalList, final ConstraintValidatorContext context) {
context.disableDefaultConstraintViolation();
boolean result = true;
if (hasDuplicateAnimal(animalList)) {
context.buildConstraintViolationWithTemplate("{my.localized.message.for.animal.unique}")
.addConstraintViolation();
result = false;
}
if (hasEnemiesInList(animalList)) {
context.buildConstraintViolationWithTemplate("{my.localized.message.for.animal.enemies}")
.addConstraintViolation();
result = false;
}
return result;
}
这个验证器向我抛出了本地化消息,但现在我想添加参数:
改变方法:
布尔值 = hasDuplicateAnimal(animalList)
到
动物 = giveMeDuplicateAnimal(animalList)
如果我有重复的动物,那么我把这个动物放在我的消息中。 我的问题是如何参数化这条消息?或者也许我应该选择不同的策略?
【问题讨论】:
标签: java validation jsf