2015-06-03 42 views
3

我注意到,當我爲下拉列表設置了我的defaultValue時,雖然它在下拉菜單中正確選擇,但當我第一次將我的組件添加到頁面時,它並未將defaultValue寫入相應的JCR,直到我編輯組件並保存。即使我只是打開相應的對話框,然後單擊確定,但我的組件按預期工作,因爲這些值已添加到JCR。AEM DefaultValue寫入JCR

我確定有一件重要的作品我在這裏失蹤了,有沒有人知道如何將組件正確呈現所需的defaultValue在第一次添加到頁面時添加到JCR中?

回答

6

贊Shwan說這就是它的工作方式。默認值或空文本僅用於對話框。在創建對話框之前,它們不會被保留。屬性必須通過不同的方法設置。 CQ已經提供了這個功能,你可以不用任何自定義代碼。

在你的組件下,創建一個名爲cq:template [nt:unstructured]的節點。如果所有數據都存儲在組件節點本身中,則將缺省值作爲屬性添加到名爲與對話框中名稱相同的cq:template節點。如果數據存儲在子節點中,請在cq:template節點下添加一個類似的節點。

來源:http://blogs.adobe.com/experiencedelivers/experience-management/defaults-in-your-component/

4

我相信這只是它的工作方式。在對話框被加載/保存之前,對話框中指定的默認值不會被使用,所以直到出現這種情況時,正在創建的JCR存儲庫上的節點將不具有默認值。

我們通過添加與組件​​綁定的後端代碼(一個標籤)來解決此問題,以便在組件加載時,如果該屬性不存在,則會使用默認值第一次。例如:

if (wcmMode == WCMMode.EDIT) 
{ 
    if(!currentNode.hasProperty("SomePropertyThatWillAlwaysExistIfTheDialogHasBeenSaved")) { 
     currentNode.setProperty("PropertyThatShouldHaveDefault", GlobalConstants.TRUE); 
     currentNode.getSession().save(); 
    } 
} 
1

像沙拉斯Madappa說的就是它工作正常,如果組件的名稱和JSP名稱相同的方式。 (參考:http://labs.6dglobal.com/blog/2014-07-08/using-the-cq-template/

如果您在組件下的組件名稱,將節點[cq:template]類型更改爲[ cq:Template]而不是[nt:unstructured]。在這種情況下,可以在JCR首次添加到頁面時將defaultValue添加到JCR中。