首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jahia从编辑模式获取活动工作区JCR数据

Jahia从编辑模式获取活动工作区JCR数据
EN

Stack Overflow用户
提问于 2018-11-08 15:58:44
回答 1查看 323关注 0票数 0

我使用的是Jahia数字体验管理器7.1.2

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

详情:

我需要在编辑模式下在页面中显示一些数据。问题是,数据是用户提交的内容,仅存储在JCR live工作区中(而不是存储在编辑模式使用的default工作区中)。

通常,我会显示这样的数据(在编辑模式下显示default工作区数据,在联机模式下显示live数据):

代码语言:javascript
复制
<%@ 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工作区中,所以在编辑模式下不会显示任何内容。

使用scriptlet,我可以获得实时内容:

代码语言:javascript
复制
<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中有什么方法可以做到吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-26 12:13:48

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

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

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

然而,有一个可能的解决方案来保持JSP代码的干净:

  • 使用脚本代码创建自己的JSP标记,然后在其中调用方法JCRContentUtils.getChildrenOfType(responsesNode, type); (在示例中使用类型= 'unt:formResponse‘参数)
  • 例如,您可以用标记库前缀= getChildrenOfTypeInLive(...)来命名这个标记为myjcr

Documentation:

我希望这能帮到你

致以敬意,

塞德里克

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53211500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档