播放框架FORM绑定到Set而不是List

dst*_*arh 5 java data-binding playframework

有没有办法正确绑定到表单上的Set?

我正在进行POJO绑定,我的控制器接受一个User对象

public static void create(User user)
Run Code Online (Sandbox Code Playgroud)

user.java

public class User implements Serializable {



    public Long id;

    @Required
    @Email
    public String email;

    public Set<Group> groups;

}
Run Code Online (Sandbox Code Playgroud)

Group.java

    public class Group implements Serializable {

        public Long id;

        public String name;

    }
Run Code Online (Sandbox Code Playgroud)

我似乎无法将我的字段绑定到组

我试过了user.groups [].id,user.groups [0] .id,user.groups.id.我可以使用它来处理列表就好了但是当它发布时,我得到一个N元素的列表,其中包含一堆空项(对于每个未检查的复选框,一个为null)我可以创建一个没有空值的新列表但那似乎不对.

编辑:用户和组并不是持久性实体,Play只是作为一个无状态且无持久的表示层,用于RESTful API

skr*_*rii 3

Play 1.2.4 的新 Binder 实现允许这样做。

在 1.2.4 之前的 Play 版本(2011 年 12 月 2 日发布)中,您无法通过发送类似参数来绑定集合

user.groups[1].id = 1
user.groups[1].name = "name1"
user.groups[3].id = 3
user.groups[3].name = "name3"
user.groups[4].id = 4
user.groups[4].name = "name4"
Run Code Online (Sandbox Code Playgroud)

绑定到 List 的问题是,您将得到一个长度为 5 的 List,其中 0 和 2 处的值为 null。

如果您仍然需要使用低于 1.2.4 的 Play 版本,可以使用以下方法解决此问题

Map<String, Group> groups
Run Code Online (Sandbox Code Playgroud)

而不是设置或列表。这样你就不会得到中间的空元素,并且你将通过调用 groups.values() 得到 Collection。