2014-11-25 49 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" />