2013-01-24 61 views
7
  1. 我具有以下Java類:檢票 - 可重複使用的面板用java繼承

    enter image description here

  2. 我具有被映射到Type1Task和Type2Task與CompoundPropertyModel兩個表格部件:

enter image description here

問題:重複的代碼。我希望D和E字段映射到任務,而不是任務類型。有什麼辦法可以讓我可以重複使用java繼承嗎?

如果是的話,你可以提供我的教程或參考嗎?

附加信息:任務可以包含一個計時器(線程)。如果你點擊提交按鈕,定時器將啓動。

謝謝!

+0

我不太確定我是否理解這個問題。但是,如果您打算將任務對象放入模型中,則不能引用線程,因爲模型對象必須是可序列化的。 – biziclop

回答

0
public class TaskPanel extends FormComponentPanel{ 

     private IModel<Task> taskModel; 

     public TaskPanel(String id, IModel<Task> model){ 
     taskModel = model; 
     add(new TextField("DTextField", new PropertyModel(taskModel, "D"))); 
     add(new TextField("ETextField", new PropertyModel(taskModel, "E"))); 
     } 
} 

這是你想要的,或者沒有我理解正確的?

6

您可以在ui中複製相同的類層次結構。

public class TaskFormPanel<T extends Task> extends Panel { 

public TaskFormPanel(String id, IModel<T> model) 
    super(id, new CompoundPropertyModel(model)); 
    add(new TextField("d")); 
    add(new TextField("e)); 
    add(new Button("submit) { 
      (...) 
    } 
} 

} 


public class Task1FormPanel extends TaskFormPanel<Task1> { 

public TaskFormPanel(String id, IModel<Task1> model) 
    super(id, model); 
    add(new TextField("a")); 
    add(new TextField("b)); 
    add(new TextField("c")); 
} 

} 


public class Task2FormPanel extends TaskFormPanel<Task2> { 

public TaskFormPanel(String id, IModel<Task1> model) 
    super(id, model); 
    add(new TextField("x")); 
    add(new TextField("y)); 
    add(new TextField("z")); 
} 

} 

和HTML文件:

TaskFormPanel:

<wicket:panel> 
    <wicket:child/> 
    <label>d</label> <input wicket:id="d"> 
    <label>e</label> <input wicket:id="e"> 
    <input type="submit" wicket:id="submit"/> 
</wicket:panel> 

Task1Panel.html:

<wicket:extend> 
    <label>a</label> <input wicket:id="a"> 
    <label>b</label> <input wicket:id="b"> 
    <label>c</label> <input wicket:id="c"> 
</wicket:extend> 

Task2Panel.html:

<wicket:extend> 
    <label>x</label> <input wicket:id="x"> 
    <label>y</label> <input wicket:id="y"> 
    <label>z</label> <input wicket:id="z"> 
</wicket:extend> 

注意:如果任務對象包含對線程的引用,請確保使用一些loadabledetachablemodel包裝任務對象,否則會遇到序列化問題。存儲您的任務並可以通過一些隨機密鑰返回它們的單件註冊表就足夠了。

+0

嗯,但有一個小問題...我有我的表單在一個頁面內,並且已經有一個。所以我會在另一個內部有一個 ... –

+0

這些是面板,而不是頁面。您可以在表單中添加適當的面板。面板有自己的標記和自己的標記繼承層次結構。 – cserepj

+0

謝謝。我會試試看。一旦我工作,我會標記爲已回答。 –