在使用CQ 5.4时,我开发了一个组件,其中包含两个包含相同字段的选项卡的对话框,并且我复制了难以维护的代码,因此我决定将选项卡分成新的.xml并包含他们与cqinclude
。
我读了here和here,可以定义命名空间,并且它将用于为字段名称添加前缀;但是当我尝试时,似乎没有包含任何前缀,并且字段中的值是"重复的" (我猜他们每个标签都会保存一次)。
这是我的代码的简化版本:
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>
有了这个,我可以正确地看到对话框和选项卡,但是在保存信息时会出现问题,因为两个选项卡中的字段具有相同的名称,而不是单独保存,它们被连接并保存在一起。例如,如果我有一个文本字段并且在tab1中我写了#34; text1&#34;并且在tab2中我写了#34; text2&#34;,当我保存重新打开时,两个选项卡中的值将是&#34; text1,text2&#34;。
到目前为止,我只对dialog.xml和新标签xml进行了更改。我错过了这些或其他文件中的某些内容或某些设置吗?我是否需要包含任何捆绑包?它可以是一般/服务器设置还是只能在组件级别完成?