当前位置: 首页 > 知识库问答 >
问题:

AEM 6.2如何访问servlet本身中定义的OSGI配置

微生阳平
2023-03-14

我已经创建了一个AEMServlet。现在我已经用servlet本身创建了OSGi配置(如下所示的数组类型的MULTI_字段),因为它也被定义为服务。现在,我的需求是如何在doGet方法中访问这个osgi配置。下面是servlet的代码。

@Component(label = "Sample Servlet", description = "Sample Servlet", immediate = true, metatype = true)
@Service
@Properties(value = {
    @Property(name = "sling.servlet.resourceTypes", value = { 
    GlobalConstants.RES_TYPE,
            GlobalConstants.PAGE_RES_TYPE }, propertyPrivate = 
 true),
    @Property(name = "sling.servlet.selectors", value = { 
 GlobalConstants.PAGES,
            GlobalConstants.ASSETS }, propertyPrivate = true),
    @Property(name = "sling.servlet.extensions", value = "xml", 
 propertyPrivate = true),

    @Property(name = "sling.servlet.methods", value = { "GET" }) })

public class SampleServlet extends SlingAllMethodsServlet {


 @Property(value={"English", "Hindi"}, unbounded = 
 PropertyUnbounded.ARRAY, label = "Subjects", cardinality = 50, 
 description = "Example for Multi field config") 
 private static final String MULTI_FIELD = "multifield";

    @Override
protected void doGet(final SlingHttpServletRequest request, final 
SlingHttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

}

共有2个答案

屠钊
2023-03-14

我同意Emin的观点,这应该在激活方法内部处理。但是在6.2上,Overwrited方法只有一个参数,我将使用PropertiesUtil而不是强制转换。

该方法看起来像:

    @Activate
    public void activate(final ComponentContext componentContext) {
        final Dictionary<?, ?> props = componentContext.getProperties();
        this.multiField = Arrays.asList(PropertiesUtil.toStringArray(props.get(MULTI_FIELD), new String[0]));
    }
傅明知
2023-03-14

您需要将属性值设置为激活方法中的成员字段:

@Activate
protected void activate(final BundleContext bundleContext, 
                        final Map<String, Object> componentConfig) {
   this.multiField = (String[]) componentConfig.get(MULTI_FIELD);
}

我自己没有尝试过这个代码,但它可以提供一些想法。您可以在此处检查主Servlet以了解其工作原理:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.engine-2.2.6/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java

 类似资料:
  • 我有一个服务(位于核心/服务内部)和服务实现(位于核心/服务/impl)。 我有一个扩展com的现有类(位于core/impl/view/components内部)。土砖cq。很明显。WCMUsePojo。使用getSlingScripterHelper,这个类可以访问我上面提到的服务。 我正在尝试在不使用WCMUsePojo的情况下访问该服务。我怎么做? 谢谢!

  • 问题内容: 我有以下Java代码- 我得到的错误是 如何正确访问注释字段? 问题答案: 默认情况下,注释在运行时不可用。您需要添加到注释定义以使其可用于运行时处理。例如: 在实践中,还应在实际尝试从字段中删除注释之前,检查该字段是否确实具有给定的注释。 另外,指定注释所属的元素类型也是一种好习惯。因此,您的示例将是:

  • 问题内容: 假设您在NxN网格中有一个JButton的GridLayout,其代码如下: 如何通过setText()单独访问网格中的每个按钮以更改按钮的名称?这需要在实际按下相关按钮之外进行。 因为每个按钮在本地实例化为“ b”,所以当前无法获得每个按钮的全局可访问名称。如何独立访问每个按钮?像JButton [] []这样的数组可以容纳对所有按钮的引用吗?如何在上面的代码中进行设置? 任何输入表

  • 我的windows批处理文件: test.py: 测试导入。py: 这不起作用。我得到一个错误消息,说'问候'没有定义。我想给你看输出,但我也有麻烦。 使用INT test_导入需要更改什么。py,那么变量在主模块中是可访问的?

  • 为了从web应用程序获取DB连接,我在web应用程序中编写了以下代码: 早些时候,我使用Tomcat作为服务器,当我在文件中配置资源详细信息时,我能够获得DB连接,但当我使用开始使用weblogic server时,我得到以下错误: 我已经尝试了这个链接中提到的选项:如何在WebLogic上查找JNDI资源?但我仍然面临着问题。 请让我知道我在哪里做错误,访问JNDI对象的过程是什么。

  • 问题内容: 我正在尝试检索JSP页面中servlet设置的属性值,但是我对参数by的运气还不错。我不确定该怎么做。也许它很简单,但是我还无法处理。 在JSP中,我一直试图检索“ attribValue”,但是没有成功: 如果我在所有过程(调用页面,servlet和目标页面)中都传递了一个参数,则它的效果很好。 问题答案: 它已经在默认的EL范围内可用,因此 应该做。 如果您想明确指定范围(EL将依