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