Значения полей Java не отображаются в компоненте aem

#java #aem #sling #sightly

Вопрос:

У меня есть компонент aem и модель слинга с тремя введенными полями, соответствующими диалоговым полям в компоненте. headline На компоненте отображается только значение поля. Я попытался изменить тип других полей на textfield, но это не возымело никакого эффекта. Я не вижу никакой другой разницы между моими областями.

Вот класс 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 На компоненте отображается только значение, два других-нет.

Ответ №1:

Для ${apreview.contentPath} вас нужно изменить свой геттер на getContentPath (обратите внимание на верблюжий C ase). Для ${apreview.elements} того, чтобы геттер выглядел нормально, вам нужно будет проверить, правильно ли заполнено свойство в JCR для вашего ресурса (так как DefaultInjectionStrategy.OPTIONAL во время ввода разрешены поля null).

Комментарии:

1. Спасибо, я все исправил contentPath , но ничего не изменилось. Я проверил elements свойство, но оно изменилось правильно.

2. Вы пытались обновить тип свойства вашей модели слинга до Double вместо String ? Другое дело было бы использовать другое имя для свойства, на всякий случай elements зарезервированное каким-либо пользовательским типом или миксином.

3. В JCR это свойство является строковым. Я попытался переименовать его в visibleEntries, но безрезультатно.