用途:编写、编辑和审查 AEM HTL(HTML Template Language)脚本。HTL 是 AEM 组件的服务端模板语言,用于替代 JSP;HTL 文件是合法 HTML,逻辑全部位于 ${表达式} 和 data-sly-* 属性中,渲染时这些属性会被剥离。HTL 没有命令式代码,业务逻辑应放在 Java(Sling Models)或 JavaScript Use-API 对象中,通过 data-sly-use 引用。
主要能力:表达式支持标识符、点/方括号访问、数组索引、字面量、数组字面量;运算符包括 !、&&、||、三元(: 两侧必须有空格)、严格相等/不等、比较、in 成员判断;可用 || 提供默认值。表达式选项 @ 可指定显示上下文(context='html'、'uri'、'text'、'unsafe' 等)、format(字符串插值、日期、数字)、i18n、join,以及 URI 操作(scheme、domain、path、selectors、extension、query、fragment 等)。块语句包括 data-sly-use、text、attribute、element、test、list、repeat、include、resource、template/call、unwrap、set;<sly> 为不渲染的虚拟容器。同一元素上多个块按优先级执行,同优先级从左到右。
使用方式:以 HTML 文件编写,用 ${...} 输出数据,用 data-sly-* 控制逻辑;模板通过 data-sly-template 定义、data-sly-call 调用,参数需显式传递,作用域不继承。
适用场景:AEM 组件模板、可复用模板片段、资源包含与子请求渲染、国际化文本、安全链接与属性输出。
限制:context='unsafe' 会关闭 XSS 防护,除非明确需要并经过安全审查,否则避免使用;script/style 上下文必须显式指定 context,否则无输出;on* 事件处理器和 style 属性不能通过 data-sly-attribute 设置;== 为严格比较,不做类型转换;AEM as a Cloud Service 建议优先使用 Sling Models,JavaScript Use-API 已弃用;data-sly-list 在集合为空时隐藏宿主元素,需要回退标记时应先用 data-sly-test。参考资料包括 references/xss-contexts.md 与 references/global-objects.md。