2012-08-13 17 views
5

मैं PlaceBar (extlib oneui आवेदन लेआउट) में गतिशील कार्रवाई जोड़ना चाहते हैं।XPages oneui लेआउट extlib - placebar कार्यों को जोड़ने के लिए कैसे गतिशील

हम कुछ विन्यास दस्तावेजों में संग्रहीत यूआरएल की जोड़ी है। इन यूआरएल के आधार पर मैं इसमें कंटेनर नोड बनाना चाहता हूं जिसमें मूल चाइल्ड नोड्स हैं। प्रत्येक बच्चे नोड सूची से एक यूआरएल का उपयोग करें। मैं कैसे कंटेनर नोड बना सकता हूं और इसके लिए बाल नोड्स को गतिशील रूप से जोड़ सकता हूं? इसके लिए कोई नमूना एसएसजेएस/जावा/सीएसजेएस कोड?

.. धन्यवाद

उत्तर

1

त्वरित जवाब के लिए धन्यवाद। यह मेरे लिए बहुत उपयोगी जानकारी है।

एक और तरीका है मैं XSnippet कोड और कुछ रिवर्स इंजीनियरिंग के आधार पर पता चला। जावा कोड में जावा कोड से अनुसरण करें:

var oneui = getComponent("applicationLayout1"); 
var uiConfig = oneui.getConfiguration(); 
var containerNode:com.ibm.xsp.extlib.tree.complex.ComplexContainerTreeNode = new com.ibm.xsp.extlib.tree.complex.ComplexContainerTreeNode(); 
containerNode.setLabel("Cluster Applications"); 

var docAppProfile = docColl.getFirstDocument(); 
while(docAppProfile != null) 
{ 
    var children:com.ibm.xsp.extlib.tree.complex.ComplexLeafTreeNode = new com.ibm.xsp.extlib.tree.complex.ComplexLeafTreeNode(); 
    children.setComponent(oneui); 
    children.setLabel(docAppProfile.getItemValueString("appTitle")); 
    children.setHref(docAppProfile.getItemValueString("appURL")); 
    children.setImage(docAppProfile.getItemValueString("appLogoThumb")); 
    containerNode.addChild(children); 

    children = null; 
    var tempDoc = docColl.getNextDocument(docAppProfile); 
    docAppProfile = null; 
    docAppProfile = tempDoc; 
} 
uiConfig.addPlaceBarAction(containerNode); 

यह केवल नमूना कोड है। कनवर्ट किया गया यह जावा कोड में है और प्रदर्शन में सुधार करने के लिए क्रमबद्ध है और इसे एप्लिकेशन में केवल एक बार लोड करें।

मदद के लिए फिर से धन्यवाद।

4

दोहराएँ नोड (xe:repeatTreeNode) जो पेज 245.

यहाँ एक बहुत ही सरल उदाहरण (किताब से सीधे ले जाया है पर XPages एक्सटेंशन लाइब्रेरी पुस्तक में वर्णन किया गया है पर एक नज़र डालें):

<xe:repeatTreeNode var="val"> 
    <xe:this.value> 
     <![CDATA[#{javascript:return [ 
     ["Home","home"], 
     ["Domino","domino"], 
     ["OneUI","oneui"] 
     ];}]]> 
    </xe:this.value> 
    <xe:this.children> 
     <xe:basicLeafNode> 
     <xe:this.submitValue><![CDATA[#{javascript:return val[1]}]]></xe:this.submitValue> 
     <xe:this.label><![CDATA[#{javascript:return val[0]}]]></xe:this.label> 
     </xe:basicLeafNode> 
    </xe:this.children> 
</xe:repeatTreeNode> 
0

एक और बात आप कर सकते हैं करने से पहले अपने कंटेनर नोड में आइटम इंजेक्षन प्रतिक्रिया प्रस्तुत करने के लिए एक PhaseListener का उपयोग करें। फिर आप इसे अपने सभी पृष्ठों के लिए एक ही स्थान पर नियंत्रित कर सकते हैं।

+0

प्रति के उदाहरण में एक SSJS समारोह कॉलिंग के रूप में सिफारिश सभी पृष्ठों के लिए भी करना होगा या, में इस छोटे से कोड, एक कस्टम नियंत्रण में लेआउट रख दिया और है कि हर जगह का उपयोग करें। लेकिन निश्चित रूप से एक चरण श्रोता एक दिलचस्प अभ्यास होगा – stwissel

+0

हैलो टोबी, क्या आपके पास PhaseListener में आइटम इंजेक्ट करने के तरीके के लिए कोई नमूना कोड है? कृपया मुझे बताओ। धन्यवाद। –

+0

मैंने कोड को एक उत्तर के रूप में जोड़ा। –

1

मूल रूप से अपने एक ही कोड आप ऊपर सूचीबद्ध है, लेकिन जावा में। और फिर चेहरे-config.xml फ़ाइल

<lifecycle> 
    <phase-listener>com.company.app.phaselisteners.PlaceBarInjector</phase-listener> 
</lifecycle> 

package com.company.app.phaselisteners; 





public class PlaceBarInjector implements PhaseListener { 

     private static final long serialVersionUID = 1L; 

     public PhaseId getPhaseId() { 
     return PhaseId.RENDER_RESPONSE; 
    } 

    public void beforePhase(PhaseEvent event) { 
     UIComponent oneui = JSFUtil.findComponent("applicationLayout1"); 
    Configruation uiconfig = oneui.getConfiguration(); 
    ComplexContainerTreeNode containerNode = new ComplexContainerTreeNode(); 
    containerNode.setLabel("Cluster Applications"); 

    Document docAppProfile = docColl.getFirstDocument(); 
    while(docAppProfile != null) 
    { 
      ComplexLeafTreeNode children = new ComplexLeafTreeNode(); 
      children.setComponent(oneui); 
      children.setLabel(docAppProfile.getItemValueString("appTitle")); 
     children.setHref(docAppProfile.getItemValueString("appURL")); 
      children.setImage(docAppProfile.getItemValueString("appLogoThumb")); 
      containerNode.addChild(children); 

      Document tempDoc = docColl.getNextDocument(docAppProfile); 
      docAppProfile = tempDoc; 
    } 
    uiConfig.addPlaceBarAction(containerNode); 
    } 

    public void afterPhase(PhaseEvent event) { 
     System.out.println("END PHASE " + event.getPhaseId()); 
    } 

}