В 2017 году функциональность была добавлена к Apache Sling и HTL, чтобы позволить Использовать 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 Model), ресурс поддержки всегда является исходной страницей, а не указанной адаптируемой.Эта часть 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
- который обеспечивает гибкую адаптацию - никогда не достигается?