2012-08-13 4 views
5

Desidero aggiungere azioni dinamicamente in PlaceBar (extlib layout dell'applicazione oneui).XPage extlib layout oneui - Come aggiungere dinamicamente le azioni della barra di posizione

Abbiamo un paio di URL memorizzati in alcuni documenti di configurazione. In base a questi URL, desidero creare un nodo Contenitore con nodi Bambino di base al suo interno. Ogni nodo figlio utilizza un URL dall'elenco. Come posso creare un nodo contenitore e aggiungervi nodi figlio dinamicamente? qualsiasi codice SSJS/Java/CSJS di esempio per questo?

Grazie ..

risposta

1

Grazie per la rapida risposta. Questa è un'informazione molto utile per me.

Un altro modo che ho trovato basato sul codice XSnippet e su alcuni inverso. dal codice java in xpage come segue:

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); 

Questo è solo un esempio di codice. Convertito questo è in codice java e serializzato per migliorare le prestazioni e caricarlo solo una volta nell'applicazione.

Grazie ancora per l'aiuto.

4

Date un'occhiata al Nodo Repeat (xe:repeatTreeNode) che viene descritto nel libro della libreria di estensione XPages a pagina 245.

Ecco un esempio molto semplice (presa direttamente dal libro):

<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

Un'altra cosa che puoi fare è utilizzare un PhaseListener per iniettare gli articoli nel vostro contenitore nodo prima di rendere la risposta. Quindi puoi controllarlo in un unico posto per tutte le tue pagine.

+0

Chiamare una funzione SSJS nell'esempio di Per farebbe troppo per tutte le pagine o, come raccomandato, ha messo il layout in un controllo personalizzato e l'uso che in tutto il mondo. Ma un ascoltatore di fase sarebbe sicuramente un esercizio interessante – stwissel

+0

Ciao Toby, hai qualche codice di esempio per il modo di iniettare oggetti in PhaseListener? Per favore mi faccia sapere. Grazie. –

+0

Ho aggiunto il codice come risposta. –

1

fondamentalmente è lo stesso codice che hai elencato sopra, ma in Java. e poi questo piccolo codice nel file faces-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()); 
    } 

} 
Problemi correlati