Wicket - 具有java子类的可重用面板

时间:2013-01-26 07:25:51

标签: forms wicket panel reusability subclass

  1. 我有一个java类:
  2.     public Task {
    
            private int id;
            private Company sender;
            private Company receiver;
    
            //Getter and Setter
            ...
        }
    

    如您所见,我在任务类中有2个其他自定义类。一家公司有例如Adress和Directory(见下面的截图)。

    1. 现在我有一个表单页面,其中包含代表公司的2个部分(发件人和收件人)。我不想为这两个部分制作2个单独的标记和java代码。有什么办法可以避免这种重复吗?
    2. enter image description here

3 个答案:

答案 0 :(得分:3)

您可以创建CompanyPanel,其中IModel<Company>。您可以在任务类上使用PropertyModel来获取一个。 PropertyModel sender = new PropertyModel(myTask, "sender")。然后该面板可以有两个TextField,您可以在传递的IModel上使用CompoundPropertyModel。

在表单上重复使用此面板两次。

在CompanyPanel上

public class CompanyPanel extends Panel
{
    public CompanyPanel(String id, IModel<Company> model)
    {
        super(id, new CompoundPropertyModel(model));
        add( new TextField("address"));
        add( new TextField("directory"));
    }
}

在docs中查找CompoundPropertyModel。这非常有用。

答案 1 :(得分:1)

创建一个用于编辑Company类的面板,并将具有不同Model的两个实例放入TaskPanel

public class TaskPanel extends Panel{

  public TaskPanel(String id, IModel<Task> model){
    super(id, model);
    add(new CompanyPanel("senderCompanyPanel", new PropertyModel(model, "sender")));
    add(new CompanyPanel("receiverCompanyPanel", new PropertyModel(model, "receiver")));
    ...
  }

}

答案 2 :(得分:0)

只需创建一个面板或片段,将其模型设为IModel<Company>,然后向您的页面添加两个实例,一个用于sender,另一个用于receiver