2016-12-19 4 views
0

Я пытаюсь преобразовать существующий код компонента из JSP в Sightly. Для этого мне нужно получить объект paragarph в бэкэнде, то есть java, и отправить его наглядный (HTL).Невозможно использовать объект объекта в объекте

Существующий код в JSP:

<% 
ParagraphSystem parSys = ParagraphSystem.create(resource, slingRequest); 
for (Paragraph par: parSys.paragraphs()) { %> 
<sling:include resource="<%= par %>"/><% 
} %> 

Таким образом, существуют в том числе ресурсов внутри компонента.

Ниже новый красивый & Jave код выше одного:

Java:

public class AnchorList extends WCMUsePojo{ 

private List<Paragraph> paragraphs; 

public List<Paragraph> getParagraphs() { 
    return paragraphs; 
} 

public void setParagraphs(List<Paragraph> paragraphs) { 
    this.paragraphs = paragraphs; 
} 

public void activate() throws Exception{ 

    paragraphs = new LinkedList<Paragraph>(); 
    Resource resource = getResource(); 

    SlingHttpServletRequest slingRequest = getRequest(); 

    ParagraphSystem parSys = ParagraphSystem.create(resource, slingRequest); 

    for (Paragraph par: parSys.paragraphs()) { 
     paragraphs.add(par); 
    } 
} 

}

красивый:

<div data-sly-use.anchorList="com.xxx.components.AnchorList"data-sly-unwrap> 
<div data-sly-list.paras="${anchorList.paragraphList}" data-sly-unwrap> 

    <div data-sly-test.paraList="${paras}" data-sly-unwrap></div> 
    <div class="anchorlistitem section collapsed"> 
    <div data-sly-resource="${@ resource=paraList}" data-sly-unwrap></div> 
    </div> 
    </div> 

Здесь я столкнулся с двумя проблемами. Во-первых, я не могу получить объект абзаца от java до конца, используя видимый. Я пытался проверить его, отображая значения объекта абзаца, используя следующие:

<div> 
para object is ${paras} 
</div> 

Но это не diplaying никакой ценности. Я могу видеть значения объекта абзаца в классе java, но он не может прочитать это наглядно.

Вторая проблема: мне нужен эквивалентный зрелищный код для JSP, чтобы включить ресурс в компонент. Я не уверен, правильно ли написан код, который я написал с использованием ресурса data-sly.

Ниже журнал ошибок я получаю, когда я пытаюсь запустить приведенный выше код Java/HTL:

19.12.2016 00: 22: 51,778 ERROR [0: 0: 0: 0: 0: 0 : 0: 1 [1482124971543] GET /website/en/home/what-is-totalinsight/investing.html HTTP/1.1] com.day.cq.wcm.core.impl.WCMDebugFilter Исключение: org.apache.sling.api .request.RecursionTooDeepException:/content/websitet/ru/home/what-is-totalinsight/investing/jcr: content/page_content/achorlist org.apache.sling.scripting.sightly.SightlyException: org.apache.sling.api.request .RecursionTooDeepException:/content/website/en/home/what-is-totalinsight/investing/jcr: content/page_content/achorlist at com.adobe.cq.sightly.WCMScriptHelper.includeResource (WCMScriptHelper.java:143) в com.adobe .cq.sightly.WCMScriptHelper.includeResource (WCMS criptHelper.java:86) на com.adobe.cq.sightly.internal.extensions.ResourceExtension.call (ResourceExtension.java:99) на org.apache.sling.scripting.sightly.impl.engine.runtime.RenderContextImpl.call (RenderContextImpl.java:89) в apps.pnc_total_insight.components.elements.achorlist.SightlyJava_achorlist.render (SightlyJava_achorlist.java:116) в org.apache.sling.scripting.sightly.impl.engine.runtime.RenderUnit.render (RenderUnit. java: 52) на org.apache.sling.scripting.sightly.impl.engine.SightlyScriptEngine.evaluateScript (SightlyScriptEngine.java:95) на org.apache.sling.scripting.sightly.impl.engine.SightlyScriptEngine.eval (SightlyScriptEngine. java: 83) at org.apache.sling.scripting.core.impl.DefaultSlingScript.call (DefaultSlingScript.java:361)

ответ

0

Вы не можете напрямую использовать объект ресурса. Вместо этого вы можете включить ресурс, используя путь ресурса и тип ресурса, как показано ниже.

<sly data-sly-use.anchorList="com.xxx.components.AnchorList"> 
    <sly data-sly-list.paras="${anchorList.paragraphList}"> 
     <div class="anchorlistitem section collapsed"> 
      <sly data-sly-resource="${paras.resourcePath @ resourceType=paras.resourceType}"></sly> 
    </sly> 
</sly> 

Кроме того, вы можете использовать тег <sly> вместо использования data-sly-unwrap с каждым элементом.

0

Есть несколько вопросов, с кодом:

  • Вы определили поглотитель для списка пунктов, как AnchorList#getParagrahs но вы вызываете его как anchorList.paragraphList из HTL/скрипт красивый. Вместо этого вы должны использовать anchorList.paragraphs
  • data-sly-test.paraList="${paras}" шт. Не нужно. Вы получаете доступ к текущему элементу с помощью переменной итератора paras, нет необходимости переназначать его.
  • Чтобы добавить ресурс абзаца, вы должны использовать путь: data-sly-resource="${paras.path @ resourceType}". В более новых версиях HTL/вы будете красивый быть в состоянии использовать фактический ресурс непосредственно: https://issues.apache.org/jira/browse/SLING-5811

В зависимости от версии HTL/красивый, что вы используете, вы можете заменить <div data-sly-unwrap...>.. с <sly..>..

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