AEM Sightly(HTL)无法识别Java Model嵌套字段问题求助
问题原因
data-sly-use使用方式错误:该属性仅用于首次实例化HTL可调用对象,参数要求为Java类全限定名、JS脚本路径或者HTL模板路径,你传入已经实例化完成的myModel.model对象作为参数时,HTL解析器会尝试将该对象解析为路径字符串,内部解析逻辑异常就会抛出ArrayIndexOutOfBoundException。- 替换为
data-sly-test后div不显示的问题:你当前的用法本来就不需要用data-sly-use去绑定已经存在的实例,嵌套的Model对象可以直接访问,不需要额外初始化。你说封装为列表用data-sly-list调用正常,也证明你的Model本身实例化没有问题,不存在字段为null的情况。
解决方案
不需要额外给AEM做配置,只要你的两个Model类都正确加了@Model相关注解、所在包已经加入Sling Model的扫描路径,直接修改HTL写法即可:
方案1:直接访问嵌套属性
不需要额外声明变量,直接调用嵌套的getter即可:
<sly data-sly-use.myModel="path.to.package.MyModel" /> <div>${myModel.model.myField}</div>
方案2:用data-sly-set定义局部变量简化书写
如果需要多次用到嵌套的Model对象,可以用data-sly-set定义别名:
<sly data-sly-use.myModel="path.to.package.MyModel" /> <div data-sly-set.localModel="${myModel.model}">${localModel.myField}</div>
内容的提问来源于stack exchange,提问作者Marcin Zareba
相关产品推荐
相关产品推荐

