没有Getter的HTL Access属性

时间:2017-08-21 21:41:02

标签: aem sightly htl

我正在编写一个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()

这可能吗?

2 个答案:

答案 0 :(得分:2)

如果Java Use-class声明了这些字段,则不需要公共字段的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

这也适用于从包中导出的Use-classes。

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

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

答案 1 :(得分:-1)

来自官方documentation

  

初始化use-class后,运行HTL文件。在此阶段,HTL通常会引入use-class的各种成员变量的状态并呈现它们。

     

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

     

getXyz形式的方法将在HTL文件中公开一个名为xyz的对象属性。   例如,在以下示例中,方法getTitle和getDescription结果可以在HTL文件的上下文中访问对象属性标题和描述:

HTL解析器确实枚举了所有公共属性,就像任何包含getter和public memebers的公共fuield的枚举一样。

虽然你是否应该有公共变量,但这不是讨论的一部分,这是值得怀疑的。实质上,ot应该像其他人一样工作。