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方法未处理额外参数,需要重写该方法,从传入的argsMap中提取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
相关产品推荐
相关产品推荐

