Jahia从编辑模式获取实时工作区JCR数据

问题描述 投票:0回答:1

我正在使用Jahia数字体验管理器7.1.2

如何在编辑模式中显示live工作区中的数据(在JSP中以JSTL显示)?


详细信息:

我需要以编辑模式在页面中显示一些数据。问题在于数据是用户提交的内容,仅存储在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 scriptlet中(或者使用taglib更好)或在groovy中做到这一点,但是有没有办法在纯JSTL中做到这一点?

jsp jstl jcr jackrabbit jahia
1个回答
0
投票

[是的,在Jahia中,在jsp组件视图之前没有对呈现servlet的控制。

此外,在默认的JSP标记中切换模式并不容易(因为在正常使用时,您只能从当前工作空间中呈现内容。

但是在这种情况下使用过滤器也不是一个好主意,因为过滤器可能会导致性能或刷新问题(破坏JSP Jahia视图组件中的默认缓存机制),并且将很难在您的其他上下文中重用代码。

但是,有一种可能的解决方案可以保持您的JSP代码干净:

  • [在其中包含您的scriptlet代码创建您自己的JSP标记,然后在其中调用方法JCRContentUtils.getChildrenOfType(responsesNode, type);(对于您的示例,类型为'unt:formResponse'的参数)] >>
  • 例如,您可以使用标签lib前缀= getChildrenOfTypeInLive(...)将此标签命名为myjcr
  • 文档:

问候,

Cédric

© www.soinside.com 2019 - 2024. All rights reserved.