在2017年functionality was added中使用Apache Sling和HTL,允许将the Use API与其他可适配对象(例如资源解析器或子资源)一起使用,而不是使用默认的后备资源或请求。 / p>
Feike Visser提供了一个带有简单列表的how to use such flexible adapters示例:
<div data-sly-list.child="${resource.listChildren}">
<sly data-sly-use.c="${'com.adobe.examples.htl.core.models.HelloWorldModel' @ adaptable=child}" />
${c.resourceType}
</div>
但是,该示例似乎不起作用(在这种情况下,使用非AEM Sling 11)。实例化HelloWorldModel
(一个Sling模型)时,后备资源始终是原始页面,而不是指定的自适应页面。就像adaptable=child
部分被忽略一样。
是什么导致该有用功能无法正常工作?
编辑:HelloWorldModel
基于Visser的example:
@Model(adaptables=Resource.class)
public class HelloWorldModel {
private static Logger log = LoggerFactory.getLogger(HelloWorldModel.class);
@OSGiService
private SlingSettingsService settings;
@SlingObject
private ResourceResolver resourceResolver;
@ValueMapValue(name = "sling:resourceType", injectionStrategy=InjectionStrategy.OPTIONAL) @Default(values="No resourceType")
private String resourceType;
private String message;
@PostConstruct
public void init() {
log.info("Reached init of HelloWorldModel");
message = "\tHello World!\n";
message += "\tResource type is: " + resourceType + "\n";
message += "\tUser id is " + resourceResolver.getUserID() + "\n";
}
public String getResourceType() {
return resourceType;
}
public String getMessage() {
log.info("Inside getMessage() method");
return message;
}
}
输出始终是页面资源的资源类型,而不是列表子级的资源类型。
编辑:这可能是因为SlingModelsUseProvider
在JavaUseProvider
之前插入了,从而导致无法提供提供灵活适应性的代码吗?