如何在java servlet中将CQ对话框转换为json格式

时间:2014-02-10 19:51:10

标签: cq5

我有以下CQ对话框示例:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root 
    jcr:primaryType="cq:Dialog"
    height="{Long}550"
    title="my Dialog"
    xtype="dialog">
    <items
        jcr:primaryType="cq:Widget"
        xtype="tabpanel">
        <items jcr:primaryType="cq:WidgetCollection">
            <info
                jcr:primaryType="cq:Panel"
                id="infoTab"
                title="-Info">
                <items jcr:primaryType="cq:WidgetCollection">
                    <info
                        jcr:primaryType="cq:Widget"
                        id="info"
                        title="Info"
                        xtype="dialogfieldset">
                        <items jcr:primaryType="cq:WidgetCollection">
                            <service
                                jcr:primaryType="cq:Widget"
                                fieldLabel="Info"
                                name="./bp_info"
                                type="select"
                                xtype="selection"/>

                        </items>
                    </info>
                </items>
            </info>
        </items>
    </items>
</jcr:root>

在我的java Servlet类中,我可以按如下方式访问该对话框:

private void createJsonObj(Node rootNode){
      Node infoNode = rootNode.getNode("dialog");
 }

infoNode包含所有元素及其属性。 我的问题是:如何以json格式存储此对话框的元素,以便我可以从创建的jsonObject中的某些javascript中轻松恢复此对话框?

1 个答案:

答案 0 :(得分:2)

您无需在servlet中以json格式存储元素,以便在javascript中访问它,对话框的路径就足够了。

获取对话框对象的一种方法是使用CQ.WCM类的getDialog()方法(如下所示)。这将返回一个CQ.Dialog对象,可以根据您的要求进行操作。

var dlg = CQ.WCM.getDialog(dialogPath);

您还可以使用选择器“.inifinity.json”向对话框路径发出AJAX GET请求,以获取json格式的对话框。例如:

var url = CQ.HTTP.externalize(dialogPath + ".infinity.json");
var dlg = CQ.HTTP.eval(url);

作为参考,您可以查看docs