无法从吊索模型获取/设置数据

Mas*_*ons 4 model jcr sling aem sightly

我们有吊带模型.例如

@Model(adaptables=Resource.class)
public class MyModel {

@Inject
private String propertyName;
}
public Image getPropertyName) {
    return propertyName;
}
Run Code Online (Sandbox Code Playgroud)

我们还添加了

<Sling-Model-Packages>
  org.apache.sling.models.it.models
</Sling-Model-Packages>
Run Code Online (Sandbox Code Playgroud)

在此之后,我们可以打开该组件的编辑对话框并检查是否插入了一些数据.我们可以在JCR中看到这些数据但是当我们试图通过Sightly获取propertyName的内容时

<div class="feature-wrapper" data-sly-use.model="org.apache.sling.models.it.models.MyModel">
<div data-sly-test="${model.propertyName}" data-sly-unwrap>
Run Code Online (Sandbox Code Playgroud)

model.propertyName将为空

任何想法或建议?我如何调试Sling?

任何人都可以在这篇文章中添加标签"Sightly"吗?

Shi*_*arg 7

我尝试在servlet的帮助下做同样的事情,首先它显示我为null,之后它工作正常,但我不知道你缺少什么.为了你的参考我为此做了一个git repo. https://github.com/gargshivani111/slingmodels

希望它会对你有所帮助.

  • 请注意,一旦你删除了回购,这个答案将不会很有帮助.[始终引用重要链接中最相关的部分,以防目标站点无法访问或永久脱机.](http://stackoverflow.com/help/how-to-answer) (4认同)

小智 6

您的捆绑包可能是javax.inject.Inject从捆绑包导入标记org.apache.sling.scripting.java而不是Sling Models捆绑包.在AEM6中,org.apache.sling.scripting.javabundle和Sling Models捆绑包公开此包,如果您的包最终从前者导入,则Sling Models将无法识别您的Import注释.

我在我的实例中通过添加<Require-Bundle>org.apache.sling.models.api</Require-Bundle>maven-bundle-plugin配置来解决这个问题,本质上是添加了一个Require-Bundle指令,强制我的bundle使用org.apache.sling.models.apibundle.

为了找到这个,我从Sling SVN存储库下载了Sling源代码,在IDE中打开它,并将调试器附加到我正在运行的AEM实例,并在Sling Models包中设置断点,以查看该机制如何尝试解析导入注释.