2012-07-15 49 views
1

我在Play中构建一个Web应用程序! 1.2.5。我有一个模型类,其中的一个属性是枚举的集收藏:玩! 1.2.5 .:对象的绑定到模板的枚举

@Entity 
@Table(name="AppUser") 
public class User extends Model { 

    ... 

    @Column(name = "industry_id") 
    @ElementCollection(targetClass = Industry.class) 
    @CollectionTable(name = "Industry", joinColumns = @JoinColumn(name = "AppUser_id")) 
    public Set<Industry> industries = new HashSet<Industry>(); 

} 

枚举是:

public enum Industry { 
    Industry1, 
    Industry2 
} 

究竟如何能在industries收集我绑定到一个编辑模板,其中industries字段被表示为复选框的列表,并且它们的检查或取消选中将它们添加或从对象集合中删除它们?

Thany你

回答

1

可以绑定你的复选框,这样

#{form @save()} 
<input type="checkbox" value="Industry1" name="user.industries">Industry number 1 
<input type="checkbox" value="Industry2" name="user.industries">Industry number 2 
<input type="checkbox" value="Industry3" name="user.industries">Industry number 3 
<input type="submit" value="Submit"> 
#{/form} 

在我的情况下,它的模型作品,未经JPA注解,但我想它在你的情况

+0

随着试验和错误,这正是我最终想出的。谢谢你的回答! – KristijanBambir 2012-07-17 08:00:09

1

也工作已经完成最近,我为您提供以下解决方案:

在控制器中,您将Enum作为Iterator传递给视图:

Iterator<Attribute> industries = EnumSet.allOf(Industry.class).iterator(); 
render(industries); 

在表单视图中,您遍历列表,并检查什么选择:

#{list items: industries, as: 'industry' } 
<label> 
    <input type="checkbox" name="industries" value="${industry.name()}" 
     #{if user?.industries?.contains(industry)} checked #{/if} 
    /> 
    &{'industry'} 
</label> 
#{/list}  

要处理的情况下没有选择任何领域,你需要以下(如,没事的时候选择,没有值将被提交,和现有的选择将留:

<input type="hidden" name="industries" value="" /> 

最后,在控制器接收方法的形式输入,只要有一个参数Set<Industry> industries成哪个Play将加载选定的值。

+0

非常感谢,但塞布的答案适用于我的场景。在我的情况下,控制器返回的renderTemplate(用户)与整个对象,而不仅仅是行业集合。 – KristijanBambir 2012-07-17 08:05:13

+0

您要求为“和他们的检查或取消选中添加它们或从对象集合中删除它们”的解决方案,这些用例由我的解决方案来处理,但不能用于Sebs。复制视图中的Enum违反DRY并且是不好的练习,另外还需要传递整个EnumSet。 – Samuel 2012-07-17 08:24:45

+0

我同意DRY原则,但在我的情况下,没有任何东西与自定义模板标签等重复。来自标记的示例: KristijanBambir 2012-07-18 08:54:47