2014-11-25 83 views
1

为了审计目的,我得到了创建工具的要求,作者可以在CQ页面的旧版本中查看。我设法使用下面的代码(在SlingServlet使用CQ:页面的resourceType为):获得可用的版本,以与JCR VersionManager显示CQ页面的旧版本

Session session = request.getResourceResolver().adaptTo(Session.class); 
VersionManager vm = session.getWorkspace().getVersionManager(); 
VersionHistory versionHistory = vm.getVersionHistory(request.getResource().getPath()); 
VersionIterator vIt = versionHistory.getAllVersions(); 
while (vIt.hasNext()) { 
    Version version = vIt.nextVersion(); 
    String no = version.getName(); 
    Calendar createdDate = version.getCreated(); 
    // do something with it 
} 

版本分例如的路径/jcr:system/jcr:versionStorage/d6/23/4f/d6234f36-3360-4024-bee2-411020ac63ae/1.0我可以在其中看到名为jcr:frozenNode的子节点,它似乎代表此特定版本的jcr:content节点。

如何告诉CQ在此版本中呈现页面?我期望与一些参数或选择器的网址,但我没有找到任何文件。我试图用Timewarp对其进行逆向工程,但这里的URL似乎仍然是原版,并且魔法隐藏在某处。

回答

1

我也接触过Adobe的支持,除了timewarp之外,似乎没有内置功能来实现这一点。不过,我做了一些尝试,发现了一个可行的解决方法。虽然对于模板中有许多固定组件的复杂布局可能并不容易,但幸运的是,我们的案例主要有一个解析。 所以我的解决办法是这样的:我通过两个选择url中加载旧版本:

  1. 我把它叫做是用来取称为versionhistory.jsp的页面组件上的另一个渲染脚本“versionhistory”。
  2. 包含实际的版本/节点名称(用‘_’不添加更换“”更多的选择

在我versionhistory.jsp我只是添加正确的路径,parsys组件(以从该示例路径问题),并且包含与默认脚本相同的布局元素,例如page.jsp

<cq:include path="/jcr:system/jcr:versionStorage/d6/23/4f/d6234f36-3360-4024-bee2-411020ac63ae/1.0/jcr:frozenNode/par" resourceType="foundation/components/parsys" />