嗨,我是Vaadin的新手,尝试创建表单并绑定到该POJO对象。
...Some declaration
Binder<User> binder = new Binder<>(User.class);
@Autowired
public FormUser(UserRepository userRepository, AuthorityRepository authorityRepository){
this.userRepository = userRepository;
this.authorityRepository = authorityRepository;
authorities = new ListSelect<>("Authorities", authorityRepository.findAll());
authorities.setItemCaptionGenerator(Authority::getAuthority);
//Set items
username.setIcon(FontAwesome.USER);
password.setIcon(FontAwesome.USER_SECRET);
saveButton.addClickListener(e -> {
userRepository.save(user);
});
setSpacing(true);
addComponents(username, password, authorities, saveButton);
binder.bindInstanceFields(this);
}
尝试访问包含 FormUser 的视图时,请收到以下错误:
java.lang.IllegalStateException:属性类型&#39; java.util.Collection&#39;不匹配字段类型&#39; java.util.Set&lt; dev.gva.model.Authority&gt;&#39;。应使用转换器手动配置绑定。
权限:
public class Authority{
private Long id;
private String authority;
getter/setters..
}
用户:
public class User{
private Long id;
private Collection<Authority> authorities;
other fields, getters/setters...
}
如何编写此转换器?感谢
答案 0 :(得分:0)
而是为转换添加样板代码,您应该在authorities
- 类中使用设置或列表作为User
- 属性。这样做的一个优点是authorities
中不允许重复。 设置和列表之间的区别在于列表是有序的,可以通过索引访问。您决定需要什么,但设置可能就足够了。