【问题标题】:SlingModel still returning null when adapting item适配项目时 SlingModel 仍然返回 null
【发布时间】:2014-07-24 00:22:08
【问题描述】:

我正在尝试让 Sling 模型正常工作。

我有一个简单的带注释的 POJO,按照约定映射到 JCR 节点,如下所示:

@Model(adaptables=Resource.class)

public class FlushRule {

@Inject

public String optingRegex;

}

我在 optingRegex 中设置了一个字符串值。

当我尝试使用它时:

FlushRule currentRule=rule.adaptTo(FlushRule.class);

虽然正确的对象在规则中,但 currentRule 为空。

我看过 http://localhost:4502/system/console/adapters 并且找不到任何适配器。

任何提示将不胜感激。

【问题讨论】:

    标签: aem sling


    【解决方案1】:

    您需要在pom.xmlmaven-bundle-plugin 配置中添加以下行:

    <configuration>
      <instructions>
        <Sling-Model-Packages>
          org.apache.sling.models.it.models
        </Sling-Model-Packages>
      </instructions>
    </configuration>
    

    其中org.apache.sling.models.it.models 是包含您的模型的Java 包。将扫描配置的包(及其所有子包)以查找@Models。更多信息请访问Sling website

    【讨论】:

    • 谢谢。我知道我做了一些愚蠢的事情。不幸的是,我似乎也在做其他愚蠢的事情,因为适配器没有注册,因此当我尝试适应时我仍然得到一个空值。你知道调试的好方法吗?
    【解决方案2】:

    Sling Model 对象可能为 null 的另一个原因是 Sling Model 具有参数化构造函数且没有默认构造函数。

    例子:

    @Model(adaptables = Resource.class)
    public class CompetitionRound {
    
        @Inject
        String round;
    
        public CompetitionRound(String round) { 
            this.round = round;
        }
    
    }
    

    添加一个默认构造函数,它应该可以工作。

    @Model(adaptables = Resource.class)
    public class CompetitionRound {
    
        @Inject
        String round;
    
        public CompetitionRound() {
    
        }   
    
        public CompetitionRound(String round) { 
            this.round = round;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 2019-10-04
      相关资源
      最近更新 更多