- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 OSGi R6 注释创建 OSGi 服务,然后将其注入(inject)到 Sling Model 类中,如下所示:
package com.aem.sites.models;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.models.annotations.Model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aem.sites.services.WeatherService;
@Model(adaptables=Resource.class)
public class Banner {
final static Logger logger = LoggerFactory.getLogger(Banner.class);
@Inject
private WeatherService weatherService;
private String message;
@PostConstruct
public void init() {
logger.info("##############################################################calling the init method");
message = weatherService.getName();
}
public String getMessage() {
logger.info("##############################################################inside the get message method");
return message;
}
}
OSGi配置界面如下所示:
package com.aem.sites.interfaces;
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.AttributeType;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@ObjectClassDefinition(name = "Configuration", description = "Configuration file")
public @interface Configuration {
@AttributeDefinition(
name = "String Property",
description = "Sample String property",
type = AttributeType.STRING
)
public String getText() default "It's a test";
}
服务类如下所示:
package com.aem.sites.services.impl;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.metatype.annotations.Designate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aem.sites.interfaces.Configuration;
import com.aem.sites.services.WeatherService;
@Component(service=WeatherService.class,
immediate=true,
configurationPid = "com.aem.sites.services.impl.WeatherServiceImpl",
configurationPolicy=ConfigurationPolicy.REQUIRE
)
@Designate(ocd = Configuration.class)
public class WeatherServiceImpl implements WeatherService{
final static Logger logger =LoggerFactory.getLogger(WeatherServiceImpl.class);
private Configuration config;
private String name;
@Activate
@Modified
protected final void activate(Configuration configuration) {
logger.info("##############################################################calling activate method inside the weather service impl class");
this.config = configuration;
name = config.getText();
}
@Deactivate
protected void deactivate() {
}
@Override
public String getName() {
logger.info("##############################################################calling get name method inside the weather service impl class");
return name;
}
}
最后是服务接口(interface):
package com.aem.sites.services;
public interface WeatherService {
public String getName();
}
我正在尝试在 HTL 类中使用 Sling Model Pojo,如下所示:
<sly data-sly-use.banner="com.aem.sites.models.Banner">
<div class="inner">
<h2>${banner.message}</h2
</div>
</sly>
添加 Maven 依赖项:
父pom.xml
<!-- <plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.5.3</version>
</plugin> -->
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.3.0</version>
<inherited>true</inherited>
</plugin>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
<version>1.3.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.annotation</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.metatype.annotations</artifactId>
<version>1.3.0</version>
</dependency>
核心pom.xml
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.annotation</artifactId>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.metatype.annotations</artifactId>
</dependency>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>com.aem.site.aem-site</Bundle-SymbolicName>
<Sling-Model-Packages>
com.aem.sites.models
</Sling-Model-Packages>
<Import-Package>javax.inject;version=0.0.0,*</Import-Package>
</instructions>
</configuration>
</plugin>
最佳答案
在服务实现中,您输入的 service=WeatherServiceImpl.class
是不正确的,它应该是服务接口(interface)名称。
所以,在WeatherServiceImpl中改变
@Component(service=WeatherServiceImpl.class,
到
@Component(service=WeatherService.class,
..
编辑:另外,configurationPolicy=ConfigurationPolicy.REQUIRE
表示至少应该有一个配置才能激活 DS 组件。 (代码中的配置不起作用)
这样您就可以转到系统/system/console/configMgr/com.aem.sites.services.impl.WeatherServiceImpl 并输入值并保存。或者您可以将配置策略设置为可选,您的代码无需配置即可运行。
关于java - AEM 6.3 使用 OSGi R6 注释和 Sling 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46627213/
我刚开始学习吊索。在这个阶段对我来说最大的问题是浏览 JCR 存储库。有没有什么好的工具可以查看 repo 里面的内容,显示资源和所有属性? 我需要这样的东西: http://blogs.adobe.
您好,我正在了解吊索分辨率的工作原理。 我遇到了 Adobe aem 开发人员指南中提到的这种情况 https://docs.adobe.com/docs/en/aem/6-2/develop/t
我们正在尝试在 AEM 6.0 中实现示例吊索模型。 没有导入的吊索模型类是这样的: @Model(adaptables = Resource.class) public class Header {
如果我以错误的方式提出问题,我会先说出我想要实现的目标: 我在 CQ5 中有以下组件结构:/apps/TEST/components/DatabaseConnection(DatabaseConnec
我对这个问题有疑问 Question: What is the correct order of precedence to setup runmodes in aem? (From left to
任何人都可以告诉我正确的方法来启动、配置以及对 sling 进行 CRUD 操作。我遵循了下面的教程,但它不适用于 CRUD。 http://sling.apache.org/documentatio
我找到了 Sling's ability to associate Servlets对于某些资源类型、选择器和扩展,这些方法在组件开发中非常有用。 现在我开始研究 ComponentFilterCha
我试图了解 sling url 重写的工作原理。我正在关注这个网址 - http://www.cognifide.com/blogs/cq/multidomain-cq-mappings-and-ap
我有 sling 映射设置,可以将传出路径重写到外部 URL。这种重写的一个例子:/content/www-sitename/home.html 将被重写为 http://www.sitename.c
我习惯于在 sling 中使用节点,并习惯于通过以下方式循环节点: NodeIterator headerNode = currentNode.getNodes(); //loop through a
我正在查看 sling 如何根据 url 调用脚本。在选择器的情况下,它似乎工作正常,但如果我不使用选择器,我会感到困惑: 我有一个页面 /content/AEMProject/English/tes
我正在开发 Sling WCMS。我需要在服务器计算机上设置 Sling 存储库并进行远程访问。 如何远程访问 Sling 存储库?有什么特殊配置吗? 谢谢。 最佳答案 Sling 使用 Apache
我有一个非常简单的代码片段,但确实给我带来了一些麻烦。我有一个非常简单的方法,可以点击“URL”参数,当有值时就返回。当它到达“fragment”参数时,它不会返回任何内容,而且我一生都无法弄清楚为什
我无法理解为什么要在吊索中使用资源而不是节点。假设我有一些简单的访问节点,如下所示: NodeIterator headerNode = currentNode.getNodes(); //loop
我在 sling 中使用 listChildren 方法时遇到问题,并且无法弄清楚原因。这是一个非常基本的代码片段,用于查找名为“header”的资源并列出其子项及其给定属性。令人困惑的是我没有收到任
我对吊带真的很陌生,所以我提前道歉。我有一个简单的脚本,但我无法开始工作。我想要做的就是获取位于 JCR 中的特定资源的“lastModified”属性。 Resource getResource =
我无法理解为什么您会在 sling 中使用资源而不是节点。所以说我有一些简单的访问节点,如下所示: NodeIterator headerNode = currentNode.getNodes();
我们有一个外部身份管理系统,它必须使用 Sling 和 REST 管理 CQ5 中用户的生命周期。 我们能够创建和删除用户和组 创造 POST http://$host:$port/libs/cq/s
我想用 data-sly-resource包含资源,但前提是它存在,例如 如果资源不存在,脚本执行失败并显示以下错误消息:找不到 servlet 来处理资源/content/blog/stats 。
Sling 模型中的 @Model 注释允许多个适应性,例如 @Model(adaptables = { SlingHttpServletRequest.class, Resource.class }
我是一名优秀的程序员,十分优秀!