我有两个具有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 ,但这只会导致对未填充的属性约束进行简单评估。虽然从列表中选择了正确的游戏,但它给了我一个空的错误:Game
Game
name
@Entity
public class Server extends Model {
@ManyToOne
@Constraints.Required
@Valid
public Game game;
@Constraints.Required
public String name;
...
谢谢你的帮助。