You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AEM 6.5:无法通过Sightly传递自定义变量至Java Use API

解决AEM ClientLib Use类无法获取自定义identifier参数的问题

核心原因与解决方案

你遇到的问题是因为Sightly模板传递的动态参数无法通过Resource读取,且未按照Sightly的参数注入规范处理自定义参数。以下是具体解决步骤:

  • 禁止通过Resource获取该参数:identifier是Sightly调用时传入的动态参数,并非JCR节点属性,所以从Resource中无法找到该值,放弃这种方式。

  • 为自定义参数添加Setter方法:Sightly遵循JavaBean规范,通过Setter方法注入传递的参数。在你扩展的ClientLibUseObject子类中添加对应字段和Setter:

public class CustomClientLibUseObject extends ClientLibUseObject {
    private String identifier;

    // 必须遵循setXxx命名规范,参数类型与模板传入值匹配
    public void setIdentifier(String identifier) {
        this.identifier = identifier;
    }

    public String getIdentifier() {
        return identifier;
    }
}
  • 重写父类js方法处理参数传递:如果父类的js方法未处理额外参数,需要重写该方法,从传入的args Map中提取identifier并赋值:
@Override
public String js(Map<String, Object> args) {
    // 从参数Map中取出identifier并设置
    if (args.containsKey("identifier")) {
        this.setIdentifier((String) args.get("identifier"));
    }
    // 调用父类逻辑或自定义后续处理
    return super.js(args);
}
  • 确认模板中Use对象引用正确:确保data-sly-use指向你自定义的子类,而非原父类:
<sly data-sly-use.clientlibsDeferred="com.your.project.package.CustomClientLibUseObject"/>
<sly data-sly-test="${clientlibDefer}">
    <sly data-sly-call="${clientlibsDeferred.js @ categories= 'testCategory', identifier='testIdentifier', loading='defer'}"/>
</sly>

内容的提问来源于stack exchange,提问作者theusual

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:07:34