AEM / CQ组件在更新后无法渲染

时间:2015-05-05 23:14:32

标签: jsp widget components cq5 aem

所以,我已经对我之前构建的组件进行了更新。该组件用于只渲染一个想要另一个页面的按钮。但是,我需要添加功能,以便它可以显示静态文本而不是按钮。所以我添加了一个单选按钮组,您可以在其中选择按钮和静态文本。

但是,在进行更新后,任何地方的组件都已在页面上使用,它不再呈现按钮。所以我把它改了,以便默认的无线电选项是按钮。现在,当我在页面上删除一个新组件时,它默认为按钮。但是现有组件默认为什么,直到我双击它们并单击OK;不需要其他更改,只需要打开和关闭组件,然后它似乎看到默认值。

我的问题是,我该如何制作,以便任何已经部署的组件将使用默认选项单选按钮,并相应地渲染,而不必打开和关闭?或者有没有办法让AEM刷新所有页面上的每个组件,以便它可以看到并使用新的单选按钮,这将默认按钮?

我宁愿不将代码添加到告诉它的JSP中,否则如果没有选择任何内容,请使用按钮"。

2 个答案:

答案 0 :(得分:0)

在对话框定义中,您只能指定对话框的默认值。拖放组件时,对话框甚至还不存在。当你打开它时,它会填充你在对话框定义中提供的默认值,然后,一旦你关闭它,将它们发送到JCR,以便你可以看到效果。

要在创建时使用默认值初始化组件,您需要创建适当的内容模板。有关详细信息,请参阅this page

编辑: 遗憾的是,没有简单的方法可以将默认内容添加到现有组件,因为组件已超过其初始化状态。我解决这个问题的方法是,创建一个Groovy脚本,将所需的(在本例中为默认值)值放入JCR并使用Groovy Console运行它。安装后,转到/etc/groovyconsole.html并运行如下所示的脚本:

session.refresh(false)
def query = session.getWorkspace().getQueryManager().createQuery(
    "SELECT * FROM [nt:unstructured] AS s " +
    "WHERE s.[sling:resourceType] = '/path/to/my/component' " +
    "AND s.[myProperty] IS NULL",javax.jcr.query.Query.JCR_SQL2)
query.execute().getNodes().each { jcrNode ->
    println "set value for $jcrNode"
    jcrNode.setProperty('myProperty', myValue)
}
//uncomment if you're happy with the list of applicable nodes printed by the script
//session.save()

这不是最漂亮和最安全的,但应该有效。我希望我没有在那里打错字。

答案 1 :(得分:0)

我最终解决这个问题的原因是,在我根据单选按钮的值选择做不同事情的代码中,我使用了if语句。然后,我将if的值作为默认值复制到else