2016-12-06 67 views
0

我有一個servlet擴展了SlingAllMethodsServlet,它正在向後端服務請求數據,並且當前正在響應對象中發回一個JSONObject。我想利用SlingModels。這可以使用我創建的servlet來完成,還是必須將我的所有servlet代碼放入SlingModel類的activate方法中?如果有可能,你能否提供一個例子?使用吊索模型從後端服務獲取數據

+0

你究竟想要做什麼?我是否理解您希望重用與Sling Model中的HTTP響應中Servlet返回的數據相同的數據? – toniedzwiedz

回答

0

您描述的場景將通過將調用封裝到您的後端服務以及OSGI服務中的關聯邏輯來很好地服務。通過這種方式,您的服務可以是@Reference d,您的Sling Model課程可以編輯@Inject

然後,Servlet的工作將被簡化爲在所引用的Service上調用適當的方法並將返回值序列化爲JSON。同樣,Sling模型的工作將被簡化爲在注入的Service上調用適當的方法,並將返回值暴露給HTL/JSP/getter中的任何內容。

0

吊索模型的作用是讓您能夠創建代表特定吊索資源的小型bean。例如,您可能有一些具有標題和文本的資源。然後,你可以簡單地寫一個吊帶型號叫做TitleTextModel是注入這些屬性到一個bean:

@Model(adaptables = Resource.class) 
public class TitleTextModel{ 

    @ValueMapValue 
    private String text; 

    @ValueMapValue 
    private String title; 

    public String getText() { 
     return text; 
    } 

    public String getTitle() { 
     return title; 
    } 

} 

如果你想使用類似的東西從你的servlet,你只需要獲取此時,相應的資源,並使其適應你的模型分類:

TitleTextModel myModel=resource.adaptTo(TitleTextModel.class); 
+0

如果可能,我會實現接口,如圖所示:https://sling.apache.org/documentation/bundles/models.html#source。使用Java 8'default'方法,mixin可以非常容易地實現,與通常所需的模擬相比,可以更輕鬆地進行測試,並確保最佳的代碼重用。 –