我使用的是Jahia数字体验管理器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工作区中,所以在编辑模式下不会显示任何内容。
使用scriptlet,我可以获得实时内容:
<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中有什么方法可以做到吗?
发布于 2020-01-26 12:13:48
对,在Jahia中,在jsp组件视图之前,您没有对呈现servlet的控制。
此外,在默认JSP标记中切换模式并不容易(因为在正常使用时,您只从当前工作区呈现内容)。
但是在这种情况下,使用过滤器也不是一个好主意,因为过滤器可能会导致性能或刷新问题(破坏Jahia视图组件中的默认缓存机制),并且很难在代码中的不同上下文中重用。
然而,有一个可能的解决方案来保持JSP代码的干净:
JCRContentUtils.getChildrenOfType(responsesNode, type); (在示例中使用类型= 'unt:formResponse‘参数)getChildrenOfTypeInLive(...)来命名这个标记为myjcr。Documentation:
我希望这能帮到你
致以敬意,
塞德里克
https://stackoverflow.com/questions/53211500
复制相似问题