【问题标题】:AEM/CQ Component Doesn't Render after UpdateAEM/CQ 组件在更新后不呈现
【发布时间】:2015-05-05 23:14:32
【问题描述】:

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

但是,在进行更新后,任何已在页面上使用过该组件的地方,它都不再呈现按钮。所以我改变了它,以便默认的单选选项是按钮。现在,当我在页面上放置一个新组件时,它默认为按钮。但是现有组件在我双击它们并单击确定之前不会默认为任何东西;无需其他更改,只需要打开和关闭组件,然后似乎看到了默认值。

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

我宁愿不向 JSP 添加代码,告诉它“如果没有选择任何内容,请使用按钮”。

【问题讨论】:

  • 你能发布你的 dialog.xml 文件吗?如果您的问题将由 AEM 解决以刷新每个组件,您可以使用 cq:editConfig 节点并可以在其中定义一些事件。 labs.sixdimensions.com/blog/2014-01-08/…

标签: jsp widget components aem


【解决方案1】:

在对话框定义中,您只能指定对话框的默认值。当您拖放组件时,对话框甚至还不存在。当你打开它时,它会填充你在对话框定义中提供的默认值,然后,一旦你关闭它,就会将它们 POST 到 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()

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

【讨论】:

  • 当我在页面上放置全新的组件时,新的默认值可以正常工作。问题是当组件已经在页面上时,默认值不会生效,因为组件尚未刷新以了解现在有默认值。
  • 我已经扩展了我的回复以包括这种情况。
  • 我认为您正在寻找可能对我有用的东西。我会在设置并尝试后报告。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2021-01-12
    相关资源
    最近更新 更多