0

2017年,Apache Sling 和 HTL 添加了功能,以允许将 Use API与不同的自适应(例如资源解析器或子资源)一起使用,而不是默认的支持资源或请求。

Feike Visser通过一个简单的列表提供了一个如何使用这种灵活适配器的示例:

<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 的示例

@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,这意味着JavaUseProvider- 提供灵活的适应 - 从未达到?

4

0 回答 0