2013-01-24 11 views
7
  1. 以下たJavaの継承と再利用可能なパネル:自動改札 - 私はJavaクラス

enter image description here

  • IはCompoundPropertyModelとType1TaskとType2Taskにマッピングされる2つのフォーム成分を有します

    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> 
    

    注:スレッドへの参照が含まれている場合は、タスクオブジェクトをラップするためにいくつかのloadableetachablemodelを使用してください。そうでない場合は、シリアル化の問題が発生します。あなたのタスクを格納し、いくつかのランダムなキーでそれらを返すことができるシングルトンレジストリで十分です。

    +0

    hmmmしかし少し問題があります...私はページの中に私のフォームを持っており、すでにがあります。ですから、私はを別の内に持っていきます... –

    +0

    これらはページではなくパネルです。フォーム内に適切なパネルを追加することができます。パネルは、独自のマークアップ継承階層を持つ独自のマークアップを持っています。 – cserepj

    +0

    ありがとうございます。私はそれを試してみる。私が働くと、私は答えとしてマークします。 –

    関連する問題