【问题标题】:Values of Java fields are not shown in aem componentJava 字段的值未显示在 aem 组件中
【发布时间】:2021-08-19 19:19:41
【问题描述】:

我有一个 aem 组件和 Sling 模型,其中三个注入字段对应于组件中的对话框字段。组件上仅显示 headline 字段的值。我试图将其他字段的类型更改为文本字段,但这没有任何效果。我没有看到我的领域之间有任何其他差异。

这是Java类:

@Model(
    adaptables = {SlingHttpServletRequest.class},
    defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL
)
public class ArticlePreviewImpl implements ArticlePreview {
  @Inject
  private String contentpath;
  
  @Inject
  private String headline;
  
  @Inject
  private String elements;
  
  @Override
  public String getContentpath() {
    return contentpath;
  }
  
  @Override
  public String getHeadline() {
    return headline;
  }
  
  @Override
  public String getElements() {
    return elements;
  }
}

这里是 HTL:

<!--/* articlepreview.html */-->
<div class="cmp-apreview"
     data-sly-use.apreview="com.training.core.models.ArticlePreview">
        path: ${apreview.contentPath}<br/>
        headline: ${apreview.headline}<br/>
        elements: ${apreview.elements}
</div>
<sly data-sly-use.clientlib="/libs/granite/sightly/templates/clientlib.html"></sly>
<sly data-sly-call="${clientlib.js @ categories='cq.authoring.dialog, training.components'}"></sly>

以下是 .content.xml 中对话框字段的定义:

<contentPath
jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/coral/foundation/form/pathfield"
fieldLabel="Path to directory with content"
name="./contentpath"/>
...
<headline
jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/coral/foundation/form/textfield"
emptyText="Enter the headline to display."
fieldLabel="Headline"
name="./headline"/>
...
<elements
jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/foundation/form/numberfield"
defaultValue="3"
fieldDescription="Number of elements in one portion"
fieldLabel="Number of elements in one portion"
max="{Double}15.0"
min="{Double}1.0"
name="./elements"
value="3"/>

组件上只显示apreview.headline的值,其他两个不显示。

【问题讨论】:

    标签: java aem sling sightly


    【解决方案1】:

    对于${apreview.contentPath},您需要将getter 更改为getContentPath(注意camelCase)。对于${apreview.elements},getter 看起来没问题,您需要检查该属性是否在 JCR 中为您的资源正确填充(因为DefaultInjectionStrategy.OPTIONAL 在注入期间允许空字段)。

    【讨论】:

    • 谢谢,我已经修复了contentPath,但没有任何改变。我检查了elements 属性,但它更改正确。
    • 您是否尝试将吊索模型属性类型更新为Double 而不是String?另一件事是为属性使用不同的名称,以防 elements 被某些自定义类型或 mixin 保留。
    • 在 JCR 中这个属性是字符串。我尝试将其重命名为 visibleEntries,没有效果。
    【解决方案2】:

    这非常简单和愚蠢 - 我将 HTL 推送到存储库而不是构建整个项目

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多