1

我有一个域对象ContactGroup,其中包含对另一个域对象Person的 ManyToMany 引用:

@Entity
public class ContactGroup {

@ManyToMany
private Set<Person> members = new HashSet<>();

  [...]
}

我需要编辑一个ContactGroup并显示 a)所有可能的Persons with form:checkboxes 和 b) 选择那些已经包含在成员中的人

到目前为止效果很好。我正在使用 form:checkboxes 标记绑定到成员并包含模型属性personList作为项目:

 <form:checkboxes path="members" multiple="true" items="${personList}" itemLabel="displayString" itemValue="id"/>

那么问题是什么?

显然,spring 会比较不同项目的 toString() 来评估是否应该检查它们。如果两个Person具有相同的 toString() 表示,则如果其中一个被选中,则它们都将被选中。

我怎样才能改变这种行为?我尝试添加自定义活页夹,但这并没有改变任何东西:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.setValidator(validator);

    binder.registerCustomEditor(Person.class, new PropertyEditorSupport() {
        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            setValue(personService.get(Long.parseLong(text)));
        }

    });

    binder.registerCustomEditor(Set.class, "members", new CustomCollectionEditor(Set.class) {
        @Override
        protected Object convertElement(Object element) {
            if (element instanceof Long) {
                return personService.get((Long) element);
            } else if (element instanceof String) {
                personService.get(Long.parseLong((String) element));
            } else if (element instanceof Person) {
                return element;
            }
            return null;
        }

    });
}
4

0 回答 0