玩! 1.2.5。对象的绑定到模板的枚举集合

时间:2012-07-15 19:25:46

标签: java groovy playframework playframework-1.x

我正在Play中构建一个Web应用程序! 1.2.5。我有一个模型类,其中一个属性是枚举的Set集合:

@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字段表示为复选框列表,并且它们的检查或取消选中是否将它们添加到对象集合中或从对象集合中删除它们?

你好吗

2 个答案:

答案 0 :(得分: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注释的模型,但我想它也适用于你的情况

答案 1 :(得分:1)

最近完成了这项工作后,我为您提供了以下解决方案:

在控制器中,您将枚举作为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将加载所选值。