Vaadin和SpringBoot

时间:2017-02-23 11:06:05

标签: java spring-boot converter vaadin

嗨,我是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...
}

如何编写此转换器?感谢

1 个答案:

答案 0 :(得分:0)

而是为转换添加样板代码,您应该在authorities - 类中使用设置列表作为User - 属性。这样做的一个优点是authorities中不允许重复。 设置列表之间的区别在于列表是有序的,可以通过索引访问。您决定需要什么,但设置可能就足够了。