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

Model 无法从吊索模型获取/设置数据,model,aem,jcr,sling,sightly,Model,Aem,Jcr,Sling,Sightly,我们有吊带模型。比如说 @Model(adaptables=Resource.class) public class MyModel { @Inject private String propertyName; } public Image getPropertyName) { return propertyName; } 我们还增加了 <Sling-Model-Packages> org.apache.sling.models.it.models </Slin

我们有吊带模型。比如说

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

@Inject
private String propertyName;
}
public Image getPropertyName) {
    return propertyName;
}
我们还增加了

<Sling-Model-Packages>
  org.apache.sling.models.it.models
</Sling-Model-Packages>

org.apache.sling.models.it.models
之后,我们可以打开该组件的“编辑”对话框,并检查是否插入了一些数据。我们可以在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>

model.propertyName将为空

有什么想法或建议吗? 我如何调试Sling


有人能在这篇文章中添加标签吗?

您的捆绑包可能是从
org.apache.sling.scripting.java
捆绑包导入
javax.inject.inject
标签,而不是sling Models捆绑包。在AEM6中,
org.apache.sling.scripting.java
bundle和sling Models bundle公开了这个包,如果您的bundle最终从前者获得了导入,sling Models将无法识别您的导入注释

在我的实例中,我通过将
org.apache.sling.models.api
添加到maven bundle插件配置中,基本上添加了一个Require bundle指令,强制我的bundle使用
org.apache.sling.models.api
bundle,从而绕过了这个问题


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

我尝试在servlet的帮助下做同样的事情,首先它向我显示null,然后它工作正常,但我不知道你缺少什么。为了供你参考,我为此做了一个git回购。


希望它能帮助您。

也有同样的问题,但在我的情况下,模型包没有设置在标签中


如果pom、maven bundle插件中使用了导出包标签,则需要将sling models包添加到该插件中。

请注意,一旦删除回购,此答案将不会有太大帮助。