【发布时间】:2013-03-07 12:07:37
【问题描述】:
我有一个有名字的简单对象
public class Foo {
private String name
}
网站上的每个用户最多可以有 10 个 Foo 与之关联。在这种情况下,当创建一个新的 Foo 时,我想验证没有另一个 foo 与已经存在的同一个用户关联。
我可以Create a custom Bean Validator 但是注释需要在编译期间定义参数。 然后我将如何传递现有 Foo 的名称?
正如许多地方所建议的,我可以使用 EL 表达式 作为获取数据的替代方法。这感觉就像用大锤敲碎坚果。它还带来了一大堆潜在问题,首先要考虑的是易于测试。
我可以使用布尔字段进行类范围的验证
@AssertTrue(message="Name already exists")
public boolean isNameUnique() {
return (existingNames.contains(name));
}
但验证消息不会显示在名称字段旁边。这是一个表面问题,这可以是一个备用计划。但是,它并不理想。
这让我想到了这个问题:
是否有一种简单的方法可以编写一个 Bean Validator,它可以在字段级别根据一组值检查值并满足以下限制?
- 之前在运行时确定的值
- 不使用 EL 表达式之类的东西
- 字段级别验证而不是类级别。
编辑以回应哈代:
Foo 类是一个持久存在于数据库中的实体。它们通过 DAO 接口被拾取和使用。
我可以遍历实体,但这意味着将 DAO 插入验证器,更不用说如果我有另一个类也有这个约束,我需要再次编写相同的东西。
【问题讨论】: