2016-08-03 43 views
1

Während der Arbeit an CQ 5.4, entwickelte ich eine Komponente, die Dialog mit zwei Registerkarten hatte die gleichen Felder, und ich war Code zu duplizieren, die es schwierig zu pflegen machte, also ich entschied sich, die Registerkarten in eine neue .xml zu trennen und sie mit cqinclude einzuschließen.Namespace ist nicht in Feldnamen der Registerkarte in CQ enthalten

Ich lese here und here, dass es möglich ist, einen Namespace zu definieren, und dass es verwendet würde, um den Feldnamen voranzukommen; aber wenn ich versuche, scheint kein Präfix enthalten zu sein, und die Werte in den Feldern sind "dupliziert" (ich denke, sie werden einmal für jede Registerkarte gespeichert).

Dies ist eine vereinfachte Version von meinem Code:

dialog.xml

<?xml version="1.0" encoding="UTF-8"?> 
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" 
      jcr:primaryType="cq:Dialog" 
      height="500" 
      width="600"> 
    <items 
     jcr:primaryType="cq:TabPanel" 
     activeTab="{Long}0"> 
    <items jcr:primaryType="cq:WidgetCollection"> 
     <image0-tab 
        jcr:primaryType="cq:Widget" 
        path="/apps/acme/components/mycomponent/dialogTileTab.cqinclude.namespace.image0.infinity.json" 
        xtype="cqinclude"/> 
     <image1-tab 
        jcr:primaryType="cq:Widget" 
        path="/apps/acme/components/mycomponent/dialogTileTab.cqinclude.namespace.image1.infinity.json" 
        xtype="cqinclude"/> 
    </items> 
    </items> 
</jcr:root> 

dialogTileTab.xml

<?xml version="1.0" encoding="UTF-8"?> 
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" 
      jcr:primaryType="cq:Widget" 
      title="Tile" 
      xtype="panel"> 
    <items jcr:primaryType="cq:WidgetCollection"> 
    <buttontitle 
       jcr:primaryType="cq:Widget" 
       defaultValue="Click Me" 
       fieldLabel="Button Text" 
       name="./button" 
       xtype="textfield"/> 
    <titlecolor 
       jcr:primaryType="cq:Widget" 
       defaultValue="blue" 
       fieldLabel="Button Color" 
       name="./color" 
       type="select" 
       xtype="selection"> 
     <options jcr:primaryType="cq:WidgetCollection"> 
     <o0 
      jcr:primaryType="nt:unstructured" 
      text="Red" 
      value="red"/> 
     <o1 
      jcr:primaryType="nt:unstructured" 
      text="Green" 
      value="green"/> 
     <o2 
      jcr:primaryType="nt:unstructured" 
      text="Cadillac Blue" 
      value="blue"/> 
     </options> 
    </titlecolor> 
    </items> 
</jcr:root> 

Damit kann ich den Dialog und die Registerkarten richtig, Das Problem tritt jedoch beim Speichern der Informationen auf, da die Felder in beiden Registerkarten die gleichen Namen haben und nicht separat gespeichert, sondern verkettet und zusammen gespeichert werden. Zum Beispiel, wenn ich ein Textfeld habe und in tab1 schreibe ich "text1" und in tab2 schreibe ich "text2", wenn ich ein erneutes Öffnen speichern, wird der Wert in beiden Registerkarten "text1, text2" sein.

Bis jetzt habe ich nur Änderungen in der dialog.xml und der neuen Registerkarte xml vorgenommen. Habe ich etwas oder etwas in diesen oder anderen Dateien vergessen? Muss ich irgendwelche Bündel einschließen? könnte es eine allgemeine/server-einstellung sein oder ist es etwas, das nur auf der komponentenebene getan werden kann?

+0

Dies ist keine OOTB-Funktion und erfordert, dass das ACS AEM Commons-Paket in der Instanz installiert wird. Können Sie bestätigen, ob es bereits installiert ist? – rakhi4110

+0

10 @ rakhi4110 Sie haben Recht: ACS AEM Commons Paket ist nicht installiert, und deshalb funktioniert es nicht gut. Wenn Sie das als Antwort verwenden könnten (mit einem Link, wo Sie das Paket finden/installieren können, wenn möglich), werde ich es als gültige Antwort markieren –

Antwort

2

Dies ist keine OOTB-Funktion und erfordert, dass das ACS AEM Commons-Paket in der Instanz installiert wird.

Auch unten ist ein Auszug aus der Wie Sie Abschnitt von this link verwenden, die Sie in der Frage erwähnt haben.

Zunächst einmal müssen Sie die acs Paket (CQInclude Namespace ist seit Version 1.10.2 verfügbar) installiert aem commons haben.

Die entsprechende Version basierend auf der Version von AEM, die Sie gerade ausführen, kann here erhalten werden.