java - 具有不同属性以显示和绑定(bind)的 Vaadin 组合框

标签 java web-applications vaadin

我有两个领域类

public class A {
  private String nick;
  private String bId;

  // getters & setters
}

public class B {
  private String id;
  private String name;

  // a lot of other fields
  // getter and setters
}

想法是A不保存完整的 b , 但只有它的 id。

现在我喜欢在 Vaadin (7.6.7) 中创建一个表单来创建一个新的 A .数量有限 B对象可用,所以我喜欢有一个组合框,用户可以在其中选择 B .

作为 idB是一个非用户友好的字段,我喜欢有一个组合框,它绑定(bind)到属性 bIdA对象并以属性 name 呈现自己的 B .

我不知道这段代码应该是什么样子。

FormLayout layout = new FormLayout();
BeanFieldGroup<A> dataBinder = new BeanFieldGroup(A.class);
Field<?> nickField = dataBinder.buildAndBind("nick");
layout.addComponent(nickField);

Combobox bBox = new Combobox("B");
List<B> allBs = ... // get all Bs;
allBs.stream().forEach(bBox::addItem);
dataBinder.bind(bBox, "bId");
// this does not work really

我知道问题是我绑定(bind)了类型为 B 的组合框到 String 类型的字段, 但我该怎么做才能显示所有 B s 在组合框中具有名称,但是当 commit正在发生,它使用 idB

最佳答案

我建议使用 ComboBox.setItemCaption(..) 显式设置项目标题:

for (final B b : allBs) {
    bBox.setItemCaption(b.getId(), b.getName());
}

然后您将 ComboBox 的属性绑定(bind)到 A 的 bId,并将 ComboBox 的容器数据源绑定(bind)到您自己设置的 B ID 列表。

bBox.setContainerDataSource(new BeanItemContainer<>(
            String.class, allBIds));

或手动设置 ComboBox 项目:

for (final B b : allBs) {
    bBox.addItem(b.getId());
}

Here是组合框的示例,也可能对您有所帮助。

关于java - 具有不同属性以显示和绑定(bind)的 Vaadin 组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38186490/

相关文章:

java - jdb中一条命令打印多个变量

java - 想要在使用 java swing 在网络浏览器中打开链接时隐藏/修改地址栏中的链接

java - 根据麦克风的声音搜索信息

java - 无法使用 Apache Tomcat 服务器访问硬盘驱动器中的文件

java - Maven 中的 Vaadin 应用程序获取小部件错误(使用 tomcat)

java - 无法使用 java(1-1-2100) 从新年日期减去 1 天

database - 业务逻辑验证的好地方

javascript - Express js "res.append"错误 : Can't set headers after they are sent

java - 用 FontAwesome 图标填充网格中的按钮并向它们添加工具提示

vaadin - 列标题中的文本可以在 Vaadin 14 的网格中换行到多行吗?