Jsp Jahia从编辑模式获取实时工作区JCR数据
我正在使用Jahia数字体验管理器7.1.2 如何在编辑模式下显示Jsp Jahia从编辑模式获取实时工作区JCR数据,jsp,jstl,jcr,jackrabbit,jahia,Jsp,Jstl,Jcr,Jackrabbit,Jahia,我正在使用Jahia数字体验管理器7.1.2 如何在编辑模式下显示live工作区中的数据(在JSTL中从JSP中) 详情: 我需要在编辑模式下在页面中显示一些数据。问题在于,数据是用户提交的内容,仅存储在JCRlive工作区中(不存储在编辑模式使用的default工作区中) 通常我会这样显示数据(在编辑模式下显示default工作区数据和在线模式下显示live数据非常有用): 我也可以用完整的java scriptlet(或者更好地用taglib)或groovy来完成,但是有没有办法用纯JST
live
工作区中的数据(在JSTL中从JSP中)
详情: 我需要在编辑模式下在页面中显示一些数据。问题在于,数据是用户提交的内容,仅存储在JCR
live
工作区中(不存储在编辑模式使用的default
工作区中)
通常我会这样显示数据(在编辑模式下显示default
工作区数据和在线模式下显示live
数据非常有用):
我也可以用完整的java scriptlet(或者更好地用taglib)或groovy来完成,但是有没有办法用纯JSTL来完成呢?你说得对,在Jahia中,在jsp组件视图之前,你没有对呈现servlet的控制权 此外,在默认JSP标记中切换模式并不容易(因为在正常使用时,您仅从当前工作区呈现内容) 但是在这种情况下使用过滤器也不是一个好主意,因为过滤器可能会导致性能或刷新问题(破坏JSP Jahia视图组件中的默认缓存机制),并且很难在代码中的不同上下文中重用 但是,有一种可能的解决方案可以保持JSP代码的整洁:
- 使用scriptlet代码创建自己的JSP标记,然后在其中调用方法
JCRContentUtils.getChildrenOfType(responseNode,type)代码>(示例的参数中的类型为“unt:formResponse”)
- 例如,您可以使用标记库前缀=
将此标记命名为myjcr
getChildrenOfTypeInLive(…)
- 对于一般JSP标记库创建:
- Jahia JCR标记库实现示例:和
Cédric您应该使用servlet并将
responseNode
设置为请求。这将为您解决这是一个组件视图,我无法控制servlet。我认为修改它的唯一方法是使用servlet。我将尝试一下。是的,我最终使用了自己的taglib,我只是想知道在纯JSTL中是否有可能。谢谢你对过滤器的建议。
<%@ 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>
<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>