我正在使用Vaadin 7中的PDF发票生成器。编写本文时的代码可以找到here。回购包括粗略的类图。
我的问题涉及从TextField和其他Vaadin组件收集用户输入以创建Invoice实例的最佳实践。
目前它的工作原理如下:
VaadinInvoiceGui中的吸气者看起来像这样。
public String getCustomerName() {
return infoPanel.getCustomerNameTextField().getValue().toString();
}
public String getCustomerStreet() {
return infoPanel.getCustomerStreetTextField().getValue().toString();
}
public String getCustomerCity() {
return infoPanel.getCustomerCityTextField().getValue().toString();
}
...
我真的不觉得将整个gui类传递给控制器,特别是传递给映射器是个好主意,但我不确定什么是更好的方法。我可以将createPdf(VaadinInvoiceGui gui)方法改为createPdf(String customer name,String customerStreet,...),但方法的参数数量会变得很大。我可以使用setter来做,但它基本上会在gui中进行对象映射,这似乎也不是一个非常干净的想法。
这样做的正确方法是什么?
答案 0 :(得分:4)
为数据写一个bean作为模型传递。然后使用FieldGroup
绑定模型和表单。将模型换行为BeanItem<Model>
。绑定可以通过名称(约定)或注释@PropertyId
完成。
master-detail-example:https://vaadin.com/wiki/-/wiki/Main/Creating+a+master-details+view+for+editing+persons
一般信息:https://vaadin.com/book/vaadin7/-/page/datamodel.html
表单中的绑定:https://vaadin.com/book/vaadin7/-/page/datamodel.itembinding.html