如何验证ManyToOne关系的约束?

时间:2012-04-18 22:15:03

标签: java crud playframework-2.0 ebean

我有两个1:n关系模型,想要使用表单验证器。

如果我从select中选择一个选项,则该元素的正确ID将存储在数据库中 但是,如果我保留-- Choose a game--,则会存储 NULL ,尽管游戏属性已使用@Constraints.Required进行注释。

模型

@Entity
public class Server extends Model {

    @Id
    public Integer serverId;

    @ManyToOne
    @Constraints.Required
    public Game game;

    ...
}
@Entity
public class Game extends Model {

    @Id
    @Constraints.Required
    public Integer gameId;

    @Constraints.Required
    public String name;

    public static Map<String,String> options() {
        LinkedHashMap<String,String> options = new LinkedHashMap<String,String>();

        for(Game c: Game.find.orderBy("name").findList()) {
            options.put(c.gameId.toString(), c.name);
        }

        return options;
    }

    ...
}

控制器

public static Result create() {
    return ok(views.html.Server.create.render(form(models.Server.class)))
}

模板

@helper.select(form("game.gameId"), helper.options(Game.options), '_default -> "-- Choose a game --")

我已经尝试使用@Valid注释强制play.data.Form在绑定过程中验证Game - 模型,但这只会导致对约束的简单评估Game属性,未填充。虽然从列表中选择了正确的游戏,但它会给我一个name为空的错误:

@Entity
public class Server extends Model {

    @ManyToOne
    @Constraints.Required
    @Valid
    public Game game;

    @Constraints.Required
    public String name;

...

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我通过编写这样的validate()方法解决了这个问题:

public boolean validate() {
    return Game.gameId != null
}

我还查看了Spring Binding文档,因为Play2.0 Java使用了Spring Binder。在第17.2.4.11章(link)中,他们给出了默认选项“ - ”。没有测试过,但它可能是解决方案。