0

我有一个有名字的简单对象

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 插入验证器,更不用说如果我有另一个类也有这个约束,我需要再次编写相同的东西。

4

1 回答 1

0

这将有助于了解您想如何使用Foo类。你能扩展你的示例代码吗?它们是否保存在Foo实例列表中。自定义约束似乎很合适。为什么需要将任何参数传递给约束。我只会遍历 foos 并检查名称是否唯一。

于 2013-03-08T11:17:54.203 回答