我在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>
答案 0 :(得分:4)
您的吊索模型必须从Resource
而非ValueMap
@Model(adaptables = Resource.class)
public interface MyModel {
@Inject @Named(value = "jcr:title")
public String getTitle();
}
您可以在Sling Models docs中看到它仅用于支持Resource
和SlingHttpServletRequest
进行调整。
许多Sling项目希望能够创建模型对象 - 从Sling对象(通常是资源)以及请求对象自动映射的POJO
...
调整多个对象 - 最少的Resource和SlingHttpServletRequest
您已经从jsp传递了resource
对象,所以不应该在那里更改任何内容..
答案 1 :(得分:0)
你应该改编自Resource.class或SlingHttpServletRequest.class,而不是ValueMap.class。在任何情况下,吊索模型工厂都可以从资源中注入值。