2014-12-03 3 views
3

У меня есть проблемы с Слинг Моделей в CQ 5.6.1 проектаНе можете adaptTo свой собственный Sling Модель

Я сделал все, как было написано здесь -> 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"/> 

но он возвращает нуль, и я не могу получить, почему это происходит

Мой собственный Sling Модель

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

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

Я уверен, что я могу получить «JCR: название» из ресурса, потому что я получить его от его адаптации к ValueMap.class

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

Может кто-нибудь помочь мне с этим?

Моя сборка pluging конфигурации в модели 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> 

и использовать на мой взгляд модуля, поэтому я не имею каких-либо ошибок при попытке adaptTo

<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

Можете ли вы разместить здесь код и пом? Немного трудно угадать w/out. – cwoeltge

ответ

0

вы должны либо адаптироваться из Resource.class или SlingHttpServletRequest.class, не ValueMap.class , в любом случае фабрика модели строп может вводить значения из ресурса.

4

Ваш Sling модель должны быть объявлены как адаптируются от Resource, а не ValueMap

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

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

в Вы можете увидеть в Sling Models docs, что она предназначена только для поддержки Resource и SlingHttpServletRequest адаптируя.

Многие Слинг проекты хотят, чтобы иметь возможность создавать объекты модели - POJO, которые автоматически преобразованные из Слинг объектов, обычно ресурсы, но и запрашивать объекты

...

Адаптировать несколько объектов - минимальный требуемый ресурс и SlingHttpServletRequest

Вы уже переходящие в resource объекте из СПЯ так не должен ничего менять ..

+0

Просто заметил, как поздно я отвечаю! Надеюсь, людям будет полезно :) –