如何从Vaadin UI建模POJO? (最佳实践)

时间:2014-03-09 23:56:04

标签: java design-patterns vaadin vaadin7

我正在使用Vaadin 7中的PDF发票生成器。编写本文时的代码可以找到here。回购包括粗略的类图。

我的问题涉及从TextField和其他Vaadin组件收集用户输入以创建Invoice实例的最佳实践。

目前它的工作原理如下:

  1. 当用户单击按钮生成pdf时,类VaadinInvoiceGui(Panel)在类VaadinInvoiceController中调用createPdf(VaadinInvoiceGui gui)方法。
  2. VaadinInvoiceController在类InvoiceMapperImpl中调用方法getInvoiceFromForm(VaadinInvoiceGui gui)。
  3. InvoiceMapperIml通过调用传递给它的VaadinInvoiceGui中的get方法来创建并返回Invoice(POJO)。这些getter返回视图中组件的值。
  4. VaadinInvoiceController接受InvoiceMapperImpl返回的Invoice并继续从中创建pdf等。
  5. 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中进行对象映射,这似乎也不是一个非常干净的想法。

    这样做的正确方法是什么?

1 个答案:

答案 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