【问题标题】:What is the use of @Model(adaptables = Resource.class) in Sling models?Sling 模型中 @Model(adaptables = Resource.class) 的用途是什么?
【发布时间】:2019-03-19 16:17:05
【问题描述】:

如果我写会有什么不同 @Model(adaptables=SlingHttpServlet.class)?

【问题讨论】:

    标签: aem sling-models


    【解决方案1】:

    这些文章给出了很好的解释:

    第一个链接说明

    "在某些用例中,您可能需要在其中获取 Request 对象 吊索模型,或者您想使用 SlingHttpServletRequest 对象(您不想在其中创建 资源对象)。”

    第二个链接提到

    “许多 Sling 项目都希望能够创建模型对象 - POJO 从 Sling 对象自动映射,通常 资源,还请求对象。有时这些 POJO 需要 OSGi 服务。”

    因此,您是使用一种自适应还是另一种(或同时使用两种)取决于您的模型需要什么。在该示例中,它创建了一个模型,该模型需要从资源中读取一些值,而从请求中读取其他值,因此您将使用的适应性取决于您在模型中需要哪些值。这是第一个链接中的示例类,它显示了需要来自资源(名字和姓氏)的数据和来自请求(路径)的数据的“消息”:

    package com.aem.core.models;
    
    import javax.annotation.PostConstruct;
    import javax.inject.Inject;
    import org.apache.sling.api.SlingHttpServletRequest;
    import org.apache.sling.api.resource.Resource;
    import org.apache.sling.models.annotations.Model;
    import org.apache.sling.models.annotations.Via;
    import org.apache.sling.models.annotations.injectorspecific.SlingObject;
    import org.apache.sling.models.annotations.DefaultInjectionStrategy;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    @Model(adaptables = {SlingHttpServletRequest.class, Resource.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
    public class AdaptationModel { 
    
        Logger logger = LoggerFactory.getLogger(this.getClass());
    
        private String message;
    
        @SlingObject
        private SlingHttpServletRequest request;
    
        @Inject @Via("resource")
        private String firstName;
    
        @Inject  @Via("resource")
        private String lastName;
    
        @PostConstruct
        protected void init() {
    
            message = "Hello World\n";
    
            if (request != null) {
                this.message += "Request Path: "+request.getRequestPathInfo().getResourcePath()+"\n";
            }
    
            message += "First Name: "+ firstName +" \n";
            message += "Last Name: "+ lastName + "\n";
    
            logger.info("inside post construct");
        }
    
        public String getMessage() {
            return message;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2012-04-18
      • 1970-01-01
      相关资源
      最近更新 更多