0

我有两个具有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验证-Model ,但这只会导致对未填充的属性约束进行简单评估。虽然从列表中选择了正确的游戏,但它给了我一个空的错误:GameGamename

@Entity
public class Server extends Model {

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

    @Constraints.Required
    public String name;

...

谢谢你的帮助。

4

1 回答 1

0

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

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

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

于 2012-04-19T07:57:20.673 回答