4

我们有吊索模型。例如

@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>

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

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

4

3 回答 3

7

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

希望它会帮助你。

于 2016-02-02T09:13:23.690 回答
6

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

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

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

于 2014-08-26T21:22:40.583 回答
1

有同样的问题,但在我的情况下,模型包未在 <Export-Package> 标记中设置。

如果在 pom、maven-bundle-plugin 中使用 Export-Package 标签,则需要在其中添加 sling 模型包。

于 2017-06-22T17:01:31.053 回答