1

我正在编写一个 AEM 组件,并且返回了一个来自 SDK 的类型的对象。这种类型有公共属性,没有 getter。为简单起见,可以这样定义:

class MyItem {
    public String prop1;
    public String prop2;
}

现在通常,我需要一个吸气剂,如下所示:

class MyItem {
    public String prop1;
    public String prop2;

    public String getProp1() {
        return prop1;
    }
}

但我没有这种奢侈。现在,我有一个 Java 实现,它使用另一种类型来解决这个问题,但我认为 HTL 不允许我prop1直接访问(它调用 getter)有点疯狂。我已经查看了文档,但看不到任何关于如何做到这一点的迹象。我希望能够写:

${item.prop1}

并让它访问公共属性而不是调用getProp1().

这可能吗?

4

2 回答 2

2

如果这些字段是由您的 Java 使用类声明的,则您不需要获取公共字段的 getter。实际上 Apache Sling 中有一个测试涵盖了这种情况:

https://github.com/apache/sling/blob/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/repopojo.html

这也适用于从包中导出的使用类。

对于使用适配器模式 [0] 的 Sling 模型,我创建了https://issues.apache.org/jira/browse/SLING-7075

[0] - https://sling.apache.org/documentation/bundles/models.html#specifying-an-alternate-adapter-class-since-110

于 2017-08-23T08:47:20.513 回答
-1

来自官方文档

一旦使用类初始化,HTL 文件就会运行。在这个阶段,HTL 通常会拉入使用类的各种成员变量的状态并呈现它们以供展示。

要从 HTL 文件中提供对这些值的访问,您必须根据以下命名约定在使用类中定义自定义 getter 方法:

getXyz 形式的方法将在 HTL 文件中公开一个名为 xyz 的对象属性。例如,在以下示例中,方法 getTitle 和 getDescription 导致对象属性 title 和 description 在 HTL 文件的上下文中变得可访问:

HTL 解析器确实枚举了所有公共属性,就像任何 Java 枚举公共 fuield 一样,包括 getter 和公共成员。

尽管您是否应该拥有公共变量值得怀疑,但这不是本次讨论的一部分。本质上 ot 应该按照其他人的指示工作。

于 2017-08-22T10:20:50.897 回答