gpt4 book ai didi

java - 将 List 绑定(bind)到 vaadin 中的 CheckBoxGroup

转载 作者:行者123 更新时间:2023-12-01 07:01:35 24 4
gpt4 key购买 nike

我有一个枚举:

public enum Roles {
USER,ADMIN;
}

我的表单上有一个 CheckBoxGroup:

private CheckBoxGroup<String> rolesCheckbox = new CheckBoxGroup<>("User roles");

绑定(bind)到此表单的 User 类的实例有一个字段:

private List<Roles> roles;

我现在想做的只是在打开特定用户实例的表单时检查正确的复选框。我可能必须在 binder.forField 中做一些事情,但我真的不知道如何做:

binder.forField(rolesCheckbox).bind(...

最佳答案

example from the Vaadin docs为了简洁起见,使用String,但您可以轻松地使用对象。假设您有一个 Role 枚举和一个 User ,如下所示:

// possible roles
public enum Role {
ADMIN, USER, GUEST
}

// bean for binding
public class User {
private Set<Role> roles;
private String name;

public User(String name, Set<Role> roles) {
this.roles = roles;
this.name = name;
}

public Set<Role> getRoles() {
return roles;
}

public void setRoles(Set<Role> roles) {
this.roles = roles;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "User{" +
"roles=" + roles +
", name='" + name + '\'' +
'}';
}
}

...您可以创建类似于以下内容的表单:

public class CheckboxEnumBinding extends VerticalLayout {

public CheckboxEnumBinding() {
// form components
TextField nameTextField = new TextField("Name");
CheckBoxGroup<Role> roleCheckBoxGroup = new CheckBoxGroup<>("Roles", DataProvider.ofItems(Role.values()));

// binder setup
Binder<User> userBinder = new Binder<>();

// name binding
userBinder.forField(nameTextField)
.asRequired("Please provide a user name")
.bind(User::getName, User::setName);

// role binding
userBinder.forField(roleCheckBoxGroup)
.asRequired("Please select at least one role")
.bind(User::getRoles, User::setRoles);

// bind to bean
userBinder.setBean(new User("Morfic", EnumSet.of(Role.ADMIN, Role.GUEST)));

// simulate a save action
Button saveButton = new Button("Save", event -> Notification.show("Saved new user info: " + userBinder.getBean()));

// add fields to the UI
addComponents(nameTextField, roleCheckBoxGroup, saveButton);
}
}

结果:

vaadin chekbox group binding

<小时/>

奖励:默认情况下,Vaadin 将使用枚举名称来显示值。如果您想要不同的东西,例如仅将第一个字母大写,您可以使用 ItemCaptionGenerator :

// spring boot app, don't reinvent the wheel
import org.springframework.util.StringUtils;
...
roleCheckBoxGroup.setItemCaptionGenerator(role -> StringUtils.capitalize(role.name().toLowerCase()));

Vaadin item caption generator

关于java - 将 List<Enum> 绑定(bind)到 vaadin 中的 CheckBoxGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com