AEM组件中Sling模型注入的Java字段值无法正常显示问题求助
问题原因
- contentpath字段无法读取:HTL模板中调用的属性名为
contentPath(P大写),但Java Sling模型的getter方法为getContentpath(),按照JavaBean命名规范,该getter对应的属性名为contentpath(p小写),名称不匹配导致HTL无法识别取值。 - elements字段无法读取:对话框中
elements为numberfield类型,存入JCR的原始值为Double类型,Sling模型中该属性定义为String类型,默认类型转换失败;同时通用@Inject注解存在注入来源歧义,可选注入策略下注入失败会直接返回null,无异常提示。
解决方案
1. 修正HTL属性拼写
将HTL中contentPath的调用改为全小写contentpath,对应JavaBean的属性命名:
<!-- 修正前 --> path: ${apreview.contentPath}<br/> <!-- 修正后 --> path: ${apreview.contentpath}<br/>
2. 调整Sling模型注入配置
将通用@Inject注解替换为@ValueMapValue,明确指定从当前资源的值映射中读取对话框存储的属性,同时调整elements的类型匹配JCR存储的数值类型:
@Model( adaptables = {SlingHttpServletRequest.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL ) public class ArticlePreviewImpl implements ArticlePreview { @ValueMapValue private String contentpath; @ValueMapValue private String headline; // 可根据业务需求选用Integer或Double类型,匹配numberfield的存储类型 @ValueMapValue private Integer elements; @Override public String getContentpath() { return contentpath; } @Override public String getHeadline() { return headline; } @Override public Integer getElements() { return elements; } }
3. 可选验证步骤
可登录CRXDE Lite,定位到对应页面下的组件节点,确认contentpath、elements属性已经成功写入节点,排除对话框配置错误导致属性未存储的问题。
内容的提问来源于stack exchange,提问作者Usevalad Kulish
相关产品推荐
相关产品推荐

