2014-02-10 3 views
1

У меня есть следующий диалог пример CQ:Как конвертировать диалог CQ в JSON-формате в Java Servlet

<?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, чтобы я мог легко восстановить это диалоговое окно в некотором javascript из созданного jsonObject?

ответ

2

Вам не нужно хранить элементы в формате json в сервлете, чтобы получить доступ к нему в javascript, достаточно указать путь к диалогу.

Один из способов, с помощью которого вы можете получить объект диалога, - это использовать метод getDialog() класса CQ.WCM (как показано ниже). Это вернет объект CQ.Dialog, который можно манипулировать на основе ваших требований.

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

Вы также можете сделать AJAX GET запрос к диалоговому пути с селектором «.inifinity.json», чтобы получить диалог в формате JSON. Например:

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

Для справки, вы можете проверить docs

Смежные вопросы