我有两个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;
...
感谢您的帮助。
答案 0 :(得分:0)
我通过编写这样的validate()
方法解决了这个问题:
public boolean validate() {
return Game.gameId != null
}
我还查看了Spring Binding文档,因为Play2.0 Java使用了Spring Binder。在第17.2.4.11章(link)中,他们给出了默认选项“ - ”。没有测试过,但它可能是解决方案。