2013-01-24 24 views
7
  1. मैं जावा वर्गों निम्नलिखित है:विकेट - जावा विरासत के साथ पुन: प्रयोज्य पैनलों

:

enter image description here

  • मैं एक दो प्रपत्र घटक है जो एक CompoundPropertyModel साथ Type1Task और Type2Task पर मैप किए जाते है

    enter image description here

    समस्या: डुप्लिकेट कोड। मैं चाहता हूं कि डी और ई फ़ील्ड किसी कार्य को मैप करें, न कि कार्य प्रकार। जब मैं जावा जावा विरासत में हूं तो यह पुन: प्रयोज्य बनाने का कोई तरीका है?

    यदि हां, तो क्या आप मुझे ट्यूटोरियल या संदर्भ प्रदान कर सकते हैं?

    अतिरिक्त जानकारी: कार्य में टाइमर (थ्रेड) हो सकता है। यदि आप सबमिट बटन पर क्लिक करते हैं तो टाइमर शुरू हो जाएगा।

    धन्यवाद!

  • +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

    आप यूई में एक ही कक्षा पदानुक्रम को डुप्लिकेट कर सकते हैं।

    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

    धन्यवाद। मुझे इसे आज़माना है। एक बार जब मैं काम करता हूं तो मैं उत्तर के रूप में चिह्नित करूंगा। –

    संबंधित मुद्दे