为什么我们需要在 vaadin 的绑定中设置 bean **binder.setBean(object)**

why do we need to set bean **binder.setBean(object)** in binding in vaadin

这是所有表单域的绑定。我的文本字段很长,所以它不能为空。

consumerBinder.forField(legal_hold)
    .bind(Consumer::getLegal_hold, Consumer::setLegal_hold);

consumerBinder.forField(deceased_fg)
    .bind(Consumer::getDeceased_fg, Consumer::setDeceased_fg);

consumerBinder.forField(household_id)
    .withConverter(new StringToLongConverter("Must be a number"))
    .bind(Consumer::getHousehold_id,Consumer::setHousehold_id);

consumerBinder.forField(ins_efid)
    .withConverter(new StringToLongConverter("Must be a number"))
    .bind(Consumer::getIns_efid,Consumer::setIns_efid);

consumerBinder.forField(ins_pqid)
    .withConverter(new StringToLongConverter("Must be a number"))
    .bind(Consumer::getIns_pqid,Consumer::setIns_pqid);

consumerBinder.forField(ins_rid)
    .withConverter(new StringToLongConverter("Must be a number"))
    .bind(Consumer::getIns_rid,Consumer::setIns_rid);

consumerBinder.forField(upd_efid)
    .withConverter(new StringToLongConverter("Must be a number"))
    .bind(Consumer::getUpd_efid,Consumer::setUpd_efid);

consumerBinder.forField(upd_pqid)
    .withConverter(new StringToLongConverter("Must be a number"))
    .bind(Consumer::getUpd_pqid,Consumer::setUpd_pqid);

consumerBinder.forField(upd_rid)
    .withConverter(new StringToLongConverter("Must be a number"))
    .bind(Consumer::getUpd_rid,Consumer::setUpd_rid);

consumerBinder.forField(upd_tmstmp)
    .withConverter(new StringTimestampConvertor())
    .bind(Consumer::getUpd_tmstmp, Consumer::setUpd_tmstmp);

consumerBinder.forField(ins_tmstmp)
    .withConverter(new StringTimestampConvertor())
    .bind(Consumer::getIns_tmstmp, Consumer::setIns_tmstmp);

consumerBinder.forField(deceased_dt)
    .withConverter(new StringTimestampConvertor())
    .bind(Consumer::getDeceased_dt, Consumer::setDeceased_dt);

binder.setBean(new Consumer());

因此,我为长字段获取默认值 0。但我希望表格清楚。

我可以根据您希望应用程序的具体行为方式为您提供两种不同的选择。

如果您希望始终在文本字段中将0显示为空,那么您可以创建一个自定义StringToLongConverter子类来转换0"",否则委托给原始实现。

如果您希望 0 仅在输入新数据时显示为空,而在编辑现有项目时将 0 显示为 0,那么您可以跳过 setBean在初始化活页夹时,而是仅在保存时创建和填充 bean 实例,例如像这样:

saveButton.addClickListener(event -> {
  Consumer newConsumer = new Consumer();
  binder.writeBean(newConsumer);
  saveInDatabase(newConsumer);
});

您可以阅读 https://vaadin.com/docs/v14/flow/binding-data/tutorial-flow-components-binder-load.html 上的文档,了解有关 setBeanwriteBean 之间区别的更多信息。