2013-11-21 52 views
2

我已經創建了一個吊索:OsgiConfig節點,它具有String []類型的屬性路徑。我需要在java類中訪問這個屬性。我想在我的JSP中調用一個java類的方法。我正在做這個使用taglib。我知道我們可以用下面的代碼實現JSP相同:CQ5 - sling:Java類中的OsgiConfig服務

Configuration conf = sling.getService(org.osgi.service.cm.ConfigurationAdmin.class).getConfiguration("Name of the config"); 
String[] myProp = (String[]) conf.getProperties().get("propertyPath"); 

我如何在Java類中做到這一點。

回答

0

您需要在您的服務的激活方法中使用該代碼。您可以使用註釋將您的課程識別爲服務。

@Component(label = "Title", description = "Description.", immediate = true, metatype = true, policy = ConfigurationPolicy.REQUIRE) 
@Service(value = {YourServiceInterface.class}) 
@Properties({ 
    @Property(name = "propertyPath", label = "Property Label", description = "Property Desc.") 
}) 

然後,您可以定義一個激活方法將其拉出。

protected void activate(ComponentContext context) throws RepositoryException { 
    String[] myProp = (String[])context.getProperties().get("propertyPath"); 
    // or 
    String[] myProp = PropertiesUtil.toStringArray(context.getProperties().get("propertyPath")); 
} 
+0

謝謝你的迴應克里斯。你能不能讓我知道這個ComponentContext是否屬於com.day.cq.wcm.api.components。因爲我無法在此ComponentContext中找到方法getProperties()。此外,一旦我有了propertyPath的值,我怎樣才能在其他方法中獲取這個值。我必須調用激活方法嗎? – user972418

+0

我相信這是您需要的重要資訊。 import org.osgi.service.component.ComponentContext; –

6

你沒說什麼類型的Java類你想獲得配置。讓我們通過選擇:

1.任何OSGi服務(如servlet中,過濾器或事件偵聽器)

添加以下字段添加到OSGi的組件類:

@Reference 
private ConfigurationAdmin configurationAdmin; 

,並在使用它與JSP中的方式相同。

2. OSGi服務到吊帶:OsgiConfig屬於

如果添加sling:OsgiConfig節點配置自己的OSGi的組件,跟蹤Chris建議:

@Component 
@Properties({ 
    @Property(name = "propertyPath") 
}) 
public class MyComponent { 

    private String[] propertyPath; 

    @Activate 
    public void activate(ComponentContext ctx) { 
     propertyPath = PropertiesUtil.toStringArray(context.getProperties().get("propertyPath")); 
    } 

    public void myMethod() { 
     // do something with the propertyPath field 
    } 
} 

的激活方法自動調用由OSGi。的ComponentContext合格的名字是org.osgi.service.component.ComponentContext

3.普通Java對象

如果你的類是不是OSGi的組件,你需要有至少到SlingHttpServletRequest對象訪問。如果你這樣做,你可以從中提取SlingScriptHelper並用它來獲得ConfigurationAdmin

SlingHttpServletRequest request = ...; 
SlingBindings bindings = (SlingBindings) request.getAttribute(SlingBindings.class.getName()); 
SlingScriptHelper sling = bindings.getSling(); 
// here you can use your JSP code