我有一个名为
的简单对象public class Foo {
private String name
}
网站上的每个用户最多可与10个Foo相关联。在此上下文中,当创建新的Foo时,我想验证没有与已存在的同一用户关联的另一个foo。
我可以Create a custom Bean Validator但是注释要求在编译期间定义参数。 我如何传递现有Foos的名称?
正如在各个地方所建议的那样,我可以使用 EL表达式作为获取数据的替代方法。这感觉就像用大锤敲打坚果一样。它还带来了一大堆潜在的问题,最重要的是考虑到易于测试。
我可以使用布尔字段
进行类范围的验证@AssertTrue(message="Name already exists")
public boolean isNameUnique() {
return (existingNames.contains(name));
}
但验证消息不会显示在名称字段旁边。这是一个美容问题,这可以作为备份计划。但是,它并不理想。
这让我想到了这个问题:
是否有一种简单的方法来编写Bean Validator,可以在字段级别检查值集合并满足以下限制?
编辑回应哈代:
Foo类是一个持久存储在数据库中的实体。它们被拾取并通过DAO接口使用。
我可以遍历实体,但这意味着将DAO插入验证器,更不用说如果我有另一个具有此约束的类,我将需要再次编写相同的东西。
答案 0 :(得分:0)
有助于了解您希望如何使用 Foo 类。你可以扩展你的示例代码吗?它们是否保存在 Foo 实例列表中。自定义约束似乎很合适。为什么需要将任何参数传递给约束。我只是迭代foos并检查名称是否是唯一的。