2016-12-01 42 views
0

一個原因我other question是以下使用案例:我想創建一個使用我的ImageModel作爲注入屬性和擴展我的TextModel一個TextImageModel:SlingModels:從SlingHttpServletRequest注入其他型號

@Model(adaptables = {SlingHttpServletRequest.class}) 
public class TextImageModel extends TextModel { 

    @Inject 
    private ImageModel image; 
} 

但是這並未沒有工作。它should work的時候我會使用Resource的適應能力強,但我需要的SlingHttpServletRequest在我ImageModel和TextModel還有:

@Model(adaptables = {SlingHttpServletRequest.class}) 
public class ImageModel { 
    @SlingObject 
    private SlingHttpServletRequest request; 

    @SlingObject 
    private Resource resource; 
} 

我如何注入使用請求作爲適應的ImageModel? 圖像資源與名稱的子資源image

回答

0

如果你想從一個特定的其他類型的比你的適應性再注入可以使用@Inject @Via("resource")

更多在這裏:https://sling.apache.org/documentation/bundles/models.html#via

我不是當然,雖然這是否可以使用模型,而不是屬性

+0

見我的編輯,我ImageModel只能通過SlingHttpServletRequest,因爲我需要它適應了'@ PostConstruct' – Thomas

+0

一個通過將neccesary時ImageModel從資源調整。事實上,@Self有所幫助。 –

1

您可以使用@Self而不是@Inject,但是您將在ImageModel中具有與TextImageModel中相同的資源。不是孩子的「形象」,如你所願。 Afaik從Request調整時,資源將始終從Request中讀取。

@Model(adaptables = {SlingHttpServletRequest.class}) 
public class TextImageModel extends TextModel { 

    @Self 
    private ImageModel image; 
} 
+0

如果要從資源調整ImageModel,則需要添加@Via(「請求」) –