Jahia получает данные JCR рабочей области в режиме редактирования

Я использую Jahia Digital Experience Manager 7.1.2.

Как я могу отображать данные из live рабочее пространство в режиме редактированияJSTL из JSP)?


Подробности:

Мне нужно отобразить некоторые данные на странице в режиме редактирования. Проблема в том, что данные представляют собой пользовательский контент, хранящийся только в JCR live рабочее пространство (не хранится в default рабочее пространство, используемое в режиме редактирования).

Обычно я отображаю данные, как это (отлично работает для отображения default данные рабочей области в режиме редактирования и live данные в онлайн режиме):

<%@ taglib prefix="jcr" uri="http://www.jahia.org/tags/jcr" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--@elvariable id="currentNode" type="org.jahia.services.content.JCRNodeWrapper"--%>

<c:forEach items="${jcr:getChildrenOfType(currentNode,'unt:formResponse')}" var="resp">
     ${resp.name}
</c:forEach>

Но, конечно, так как мои данные существуют только в live рабочая область, ничего не отображается в режиме редактирования.

Используя скриптлет, я могу получить живой контент:

<c:set var="currentNodeId" value="${currentNode.identifier}"/>
<c:set var="locale" value="${renderContext.mainResourceLocale}"/>
<%
     JCRNodeWrapper responsesNode = JCRSessionFactory.getInstance().getCurrentUserSession("live", locale).getNodeByIdentifier(currentNodeId);
     for (JCRNodeWrapper resp : responsesNode.getNodes()) {
          log.info(resp.getName());
     }
     pageContext.setAttribute("responsesNode", responsesNode);
%>
<c:forEach items="${jcr:getChildrenOfType(responsesNode,'unt:formResponse')}" var="resp">
     ${resp.name}
</c:forEach>

Я также могу сделать это в полном java скриптлете (или лучше с taglib) или в groovy, но есть ли способ сделать это в чистом JSTL?

0 ответов

Вы правы, в Jahia у вас нет управления сервлетом рендеринга перед представлением компонента jsp.

Более того, нелегко переключить режим в тегах JSP по умолчанию (потому что при нормальном использовании вы визуализируете контент только из текущего рабочего пространства).

Но использование фильтра в этом случае также не является хорошей идеей, поскольку фильтр может вызвать проблемы с производительностью или обновлением (нарушить механизм кеширования по умолчанию в компоненте представления JSP Jahia), и его будет сложно повторно использовать в другом контексте в вашем коде.

Однако есть возможное решение сохранить ваш код JSP чистым:

  • Создайте свой собственный тег JSP с кодом вашего скриптлета внутри, затем вызовите внутри него метод JCRContentUtils.getChildrenOfType(responsesNode, type); (с параметром type = 'unt:formResponse' в вашем примере)
  • Вы можете назвать этот тег getChildrenOfTypeInLive(...) например, с тегом lib prefix = myjcr.

Документация:

Я надеюсь, что это поможет вам,

С Уважением,

Седрик

Другие вопросы по тегам