我有以下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中轻松恢复此对话框?
答案 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