0

我正在通过实用的博客。我有如下简单的使用类:

public class SightlyDemo2 extends WCMUse {
    private String fullName;

    @Override
    public void activate() {

        fullName = get("firstName", String.class) + " " + get("lastName", String.class);
    }

    public String getFullName() {
        return fullName;
    }
}

我通过 .html 文件中的以下代码成功调用它:

<div data-sly-use.aemComponent="${'org.practice.sightly.SightlyDemo2' @ firstName= 'AEM', lastName = 'CQ5'}">
    ${aemComponent.fullName}
</div>

它工作正常,但是当我尝试创建适配器类时,它停止渲染全名。下面是适配器代码。

@Component(metatype = true, immediate = true)
@Service
public class SightlyDemo2Adapter implements AdapterFactory {
    @Property(name = "adapters")
    protected static final String[] ADAPTER_CLASSES = {SightlyDemo2.class.getName()};
    @Property(name = "adaptables")
    protected static final String[] ADAPTABLE_CLASSES = {Resource.class.getName()};
    @Override
    public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) {
        if (adaptable instanceof Resource) {
            SightlyDemo2 comp = new SightlyDemo2();
            return (AdapterType) comp;
        }
        return null;
    }
}

我想使用自定义适配器,例如:

 SightlyDemo2 obj = resource.adaptTo(SightlyDemo2.class);

任何想法。

谢谢

4

1 回答 1

1

如果您使用适配器创建一个从适配器扩展 WCMUse 的类,它不会直接工作。当您在 Sightly 中使用扩展 WCMUse 的类时,Sightly 不仅会实例化它,还会调用您在 AdapterFactory 中无法执行的 init() 和 activate() 方法,因为您无法从资源。

如果你需要从sightly 和adaptTo() 中使用SightlyDemo2 类,我建议你放弃WCMUse。您可以从资源中检索您需要的任何属性并将它们从 AdapterFactory 注入您的 pojo,或者更好的是,为它创建一个Sling 模型

于 2015-04-28T11:22:07.853 回答