Servlets 创建新节点的小部件对话-Adobe CQ5

Servlets 创建新节点的小部件对话-Adobe CQ5,servlets,widget,aem,Servlets,Widget,Aem,我正在尝试为一个页面创建一个编辑小部件,该页面要求提供各种详细信息,然后将这些详细信息存储为新创建节点的属性 例如: 制作 模型 里程 我想把它们作为一个节点存储在/content/cars或类似的父节点下 我如何获得一个小部件来在/content/cars下创建一个新节点并将这些属性存储在那里 我必须将数据发送到我创建的servlet吗?或者是否有选项可以启用此功能?您可能希望在包含页面中创建节点的路径处包含一个组件 例如,如果您有一个页面/content/cars,并且您希望在/conten

我正在尝试为一个页面创建一个编辑小部件,该页面要求提供各种详细信息,然后将这些详细信息存储为新创建节点的属性

例如: 制作 模型 里程

我想把它们作为一个节点存储在/content/cars或类似的父节点下

我如何获得一个小部件来在/content/cars下创建一个新节点并将这些属性存储在那里


我必须将数据发送到我创建的servlet吗?或者是否有选项可以启用此功能?

您可能希望在包含页面中创建节点的路径处包含一个组件

例如,如果您有一个页面/content/cars,并且您希望在/content/cars/jcr:content/Chevy下面创建一个Chevy节点,那么您应该使用以下片段包含该组件:

这将包括内容和呈现内容,并允许使用位于/apps/myapp/components/manufacturer的组件对其进行编辑

如果需要,甚至可以将节点设置为绝对路径,例如,如果要在另一个页面上引用/content/data/cars/chevy上的内容,可以使用:


您可能希望在包含页面中创建节点的路径处包含一个组件

例如,如果您有一个页面/content/cars,并且您希望在/content/cars/jcr:content/Chevy下面创建一个Chevy节点,那么您应该使用以下片段包含该组件:

这将包括内容和呈现内容,并允许使用位于/apps/myapp/components/manufacturer的组件对其进行编辑

如果需要,甚至可以将节点设置为绝对路径,例如,如果要在另一个页面上引用/content/data/cars/chevy上的内容,可以使用:


基于Adobe提供的备忘单:

默认的Sling POST servlet通过检查ExtJS对话框中包含的输入标记的“name”属性来识别要更新的JCR属性。要将textfield或dropdownfield等小部件配置为目标并更新特定属性,需要在小部件定义中指定属性的名称

例如,如果您使用XML文件在/content/cars上定义页面对话框,并且希望有一些小部件允许用户将model、make和year存储到cars页面的jcr:content节点。关联的对话框定义将包含如下节点:

<make
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./make"/>
<model
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./model"/>
<year
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./year"/>
<make
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./brands/make"/>

要更改小部件类型,您需要调整xtype属性;要将属性更改为target,您需要调整name属性。注意,它与调用对话框的页面/组件的内容节点是相对的(在本例中,是相对于/content/cars/jcr:content)

另一个示例:假设您希望将make的值存储到一个名为“make”的属性,该属性位于/content/cars/jcr:content/brands这样的节点上,那么您的定义如下所示:

<make
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./make"/>
<model
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./model"/>
<year
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./year"/>
<make
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./brands/make"/>

有关可用X类型的参考,请查看:

根据Adobe提供的备忘单:

默认的Sling POST servlet通过检查ExtJS对话框中包含的输入标记的“name”属性来识别要更新的JCR属性。要将textfield或dropdownfield等小部件配置为目标并更新特定属性,需要在小部件定义中指定属性的名称

例如,如果您使用XML文件在/content/cars上定义页面对话框,并且希望有一些小部件允许用户将model、make和year存储到cars页面的jcr:content节点。关联的对话框定义将包含如下节点:

<make
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./make"/>
<model
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./model"/>
<year
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./year"/>
<make
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./brands/make"/>

要更改小部件类型,您需要调整xtype属性;要将属性更改为target,您需要调整name属性。注意,它与调用对话框的页面/组件的内容节点是相对的(在本例中,是相对于/content/cars/jcr:content)

另一个示例:假设您希望将make的值存储到一个名为“make”的属性,该属性位于/content/cars/jcr:content/brands这样的节点上,那么您的定义如下所示:

<make
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./make"/>
<model
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./model"/>
<year
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./year"/>
<make
    jcr:primaryType="cq:Widget"
    xtype="textfield"
    name="./brands/make"/>

有关可用X类型的参考,请查看: 试试这个:

将此js函数添加到页面中

function doOpenDlg(url, path) {
    var d = CQ.WCM.getDialog(url);
    var reloadPage = true;
    if(d) {
        if( reloadPage ) {
            d.success = function(form, action) {
                CQ.Util.reload(CQ.WCM.getContentWindow());
            };
        }
        d.show();
        d.loadContent(path);
    }
}
然后创建一个类似于文件的对话框。在本例中:

/apps/myapp/components/page/mypage/myxmlfile.xml

然后,您可以打开一个与此文件匹配的对话框:

 <input type="button" value="Open my dialog" style="font-size: 14px;font-weight: bold;"
           onclick="doOpenDlg('/apps/myapp/components/page/mypage/myxmlfile.infinity.json', '<%=currentNode.getPath() %>');" />

这样,您的对话框数据将保存在currentNode中,但您可以放置任何所需的路径。

尝试以下操作:

将此js函数添加到页面中

function doOpenDlg(url, path) {
    var d = CQ.WCM.getDialog(url);
    var reloadPage = true;
    if(d) {
        if( reloadPage ) {
            d.success = function(form, action) {
                CQ.Util.reload(CQ.WCM.getContentWindow());
            };
        }
        d.show();
        d.loadContent(path);
    }
}
然后创建一个类似于文件的对话框。在本例中:

/apps/myapp/components/page/mypage/myxmlfile.xml

然后,您可以打开一个与此文件匹配的对话框:

 <input type="button" value="Open my dialog" style="font-size: 14px;font-weight: bold;"
           onclick="doOpenDlg('/apps/myapp/components/page/mypage/myxmlfile.infinity.json', '<%=currentNode.getPath() %>');" />

这样,对话框数据将保存在currentNode中,但您可以放置任何所需的路径