无法适应我自己的吊索模型

时间:2014-12-03 13:27:04

标签: cq5 jsp-tags osgi-bundle sling

我在CQ 5.6.1项目中遇到Sling Models的问题

我做了所有这里写的 - > http://www.wemblog.com/2014/11/how-to-use-sling-models-in-cq56.html?showComment=1417594209746#c3879427154987489876

但是当我尝试使用

<sling:adaptTo adaptable="${resource}" adaptTo="com.my.client.core.models.MyModel" var="model"/>

但它返回null并且我无法理解为什么会发生

我自己的吊带模型

@Model(adaptables = ValueMap.class)
public interface MyModel {

    @Inject @Named(value = "jcr:title")
    public String getTitle();
}

我确信我可以从资源中检索“jcr:title”,因为我将它从适应它变为ValueMap.class

<% String title = resource.adaptTo(ValueMap.class).get("jcr:title", String.class);%>
    <%=title%>

任何人都可以帮助我吗?

我的构建在模型Bundle

中插入配置
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Export-Package>
                            com.my.client.*
                        </Export-Package>
                        <Bundle-Category>models/Bundle-Category>
                        <Require-Bundle>org.apache.sling.models.api</Require-Bundle>
                        <Import-Package>
                            org.apache.log ;resolution:=optional,
                            org.apache.avalon.framework.logger ;resolution:=optional,
                            *
                        </Import-Package>
                        <Sling-Model-Packages>
                            com.my.client.core.models
                        </Sling-Model-Packages>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

我使用两个依赖项

 <dependency>
        <groupId>org.apache.sling</groupId>
        <artifactId>org.apache.sling.models.api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.sling</groupId>
        <artifactId>org.apache.sling.models.impl</artifactId>
    </dependency>

并在我的视图模块中使用,所以我在尝试改编时没有任何错误

<dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.scripting.jsp</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.scripting.jsp.taglib</artifactId>
            <version>2.2.0</version>
        </dependency>

2 个答案:

答案 0 :(得分:4)

您的吊索模型必须从Resource而非ValueMap

声明为适应性强
@Model(adaptables = Resource.class)
public interface MyModel {

    @Inject @Named(value = "jcr:title")
    public String getTitle();
}

您可以在Sling Models docs中看到它仅用于支持ResourceSlingHttpServletRequest进行调整。

  

许多Sling项目希望能够创建模型对象 - 从Sling对象(通常是资源)以及请求对象自动映射的POJO

     

...

     

调整多个对象 - 最少的Resource和SlingHttpServletRequest

您已经从jsp传递了resource对象,所以不应该在那里更改任何内容..

答案 1 :(得分:0)

你应该改编自Resource.class或SlingHttpServletRequest.class,而不是ValueMap.class。在任何情况下,吊索模型工厂都可以从资源中注入值。