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

Posted

技术标签:

【中文标题】玩! 1.2.5.:对象的枚举集合绑定到模板【英文标题】:Play! 1.2.5.: Object's collection of enums binding to template 【发布时间】:2012-07-15 19:25:46 【问题描述】:

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

谢谢你

【问题讨论】:

【参考方案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 注释的模型,但我想它也适用于你的情况

【讨论】:

经过反复试验,这正是我最终想出的。谢谢你的回答!【参考方案2】:

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

在控制器中,您将 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&lt;Industry&gt; industries 就足够了,Play 将在其中加载选定的值。

【讨论】:

非常感谢,但 Seb 的回答适用于我的场景。在我的例子中,控制器返回 renderTemplate(user) 和整个对象,而不仅仅是行业集合。 您要求为“以及他们的选中或取消选中添加它们或从对象集合中删除它们”的解决方案,这些用例由我的解决方案处理,但不使用 Sebs。在视图中复制 Enum 违反 DRY 并且是不好的做法,值得另外传入整个 EnumSet。 我同意 DRY 原则,但在我的情况下,自定义模板标签等不会重复任何内容。来自标签的示例: 我争论的是复制 Enum 值的代码,而不是输入标签的代码。

以上是关于玩! 1.2.5.:对象的枚举集合绑定到模板的主要内容,如果未能解决你的问题,请参考以下文章

在 MVVM 中将 Observable 集合绑定到 wrappanel

WPF 将枚举列表(或类似列表)绑定到复选框列表

ComboBox在WPF中的绑定示例:绑定项集合转换,及其源代码

如何使用 MVC Razor 在编辑器模板中将 Kendo UI Grid 绑定到我的模型集合

我java里的枚举不懂...

WPF将单个文本框绑定到集合对象或数组中的元素