我在表单中有一个复选框列表,它基于系统中的一些现有对象,如下所示:
#{list items:foobars, as:'bar'}
<div>
#{set name:"foo.bars[" + bar_index + "]" /}
<label for="${bar.name}">${bar.name}</label>
<input id="${bar.name}" name="${name}" type="checkbox">
</div>
#{/list}
我希望Play将它们绑定到Foo对象应包含的Bar对象列表。 (Foo和Bar有很多对多的关系)
这不起作用。我怎么能用Play做到这一点?
答案 0 :(得分:2)
在我的情况下,我使用了旧的Long集合绑定,我无法使用id建议的字段命名来生成JPA关联集合的bindind:使用下一个集合来绑定在Web表单上选择的id:< / p>
Set<Long> bars
请记住,如果没有选中复选框,则该集合可能为null且长度不为零,因此验证代码应为:
if (bars == null || bars.size() == 0)
validation.addError("bars", "Please selecta at least one bar");
接下来,在控制器处理程序中,您应该使用id找到JPA find,并添加到foo的集合中:
for (Long id : bars)
foo.bars.add((Bar) Bar.findById(id));
再见
汉斯