我正在使用 Jahia 数字体验管理器 7.1.2 。
如何在编辑模式(从 JSP 使用 JSTL )中显示来自live
工作区的数据?
详细信息:
我需要在编辑模式下的页面中显示一些数据。问题在于数据是用户提交的内容,仅存储在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中做到这一点?
答案 0 :(得分:1)
是的,在Jahia中,在jsp组件视图之前没有对呈现servlet的控制。
此外,在默认的JSP标记中切换模式并不容易(因为在正常使用下,您只能从当前工作空间中呈现内容)。
但是在这种情况下,使用过滤器也不是一个好主意,因为过滤器可能会导致性能或刷新问题(破坏JSP Jahia视图组件中的默认缓存机制),并且将难以在以下环境中重用您的代码。
但是,有一种可能的解决方案可以保持您的JSP代码干净:
JCRContentUtils.getChildrenOfType(responsesNode, type);
(在示例参数中,类型为'unt:formResponse')getChildrenOfTypeInLive(...)
将此标签命名为myjcr
。文档:
希望这对您有帮助,
关于
塞德里克