1

我正在 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字段表示为复选框列表,并且它们的选中或取消选中会添加它们或将它们从对象集合中删除?

比你

4

2 回答 2

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 注释的模型,但我想它也适用于您的情况

于 2012-07-16T07:19:38.953 回答
1

最近这样做了,我为您提供以下解决方案:

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

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 将在其中加载选定的值。

于 2012-07-17T06:31:25.020 回答