2012-08-13 8 views
5

Quiero agregar acciones dinámicamente en PlaceBar (diseño de aplicación extlib oneui).XPages extlib oneui layout - Cómo agregar acciones de barra de posición dinámicamente

Tenemos un par de URL almacenadas en algunos documentos de configuración. Basado en estas URL, quiero crear un nodo contenedor que tenga nodos Basic Child. Todos los nodos secundarios usan una URL de la lista. ¿Cómo puedo crear un nodo de contenedor y agregarle nodos secundarios dinámicamente? ¿Alguna muestra de código SSJS/Java/CSJS para esto?

Gracias ..

Respuesta

1

Gracias por la respuesta rápida. Esta es una información muy útil para mí.

Otra forma en que me enteré basándome en el código XSnippet y algunas modificaciones inversas. del código java en xpage como sigue:

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

Éste es código de muestra solamente. Convertido esto es en código java y serializado para mejorar el rendimiento y cargarlo solo una vez en la aplicación.

Gracias de nuevo por su ayuda.

4

Tenga una mirada en el Nodo de repetición (xe:repeatTreeNode) que se describe en el libro de Extensión Biblioteca XPages en la página 245.

Aquí hay un ejemplo muy sencillo (tomada directamente del 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

Otra cosa que puede hacer es usar un PhaseListener para inyectar los artículos en su nodo de contenedores antes de dar respuesta. Entonces podrías controlarlo en un solo lugar para todas tus páginas.

+0

Llamar a una función SSJS en el ejemplo de Per haría demasiado para todas las páginas o, como se recomienda, poner el diseño en un control personalizado y el uso que en todas partes. Pero un oyente de fase seguro sería un ejercicio interesante – stwissel

+0

Hola Toby, ¿tienes algún código de muestra para la forma de inyectar elementos en PhaseListener? Por favor hagamelo saber. Gracias. –

+0

Agregué el código como una respuesta. –

1

básicamente es el mismo código que usted mencionó anteriormente, pero en Java. y entonces este pequeño código en el archivo 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()); 
    } 

} 
Cuestiones relacionadas