首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SlingModels:从SlingHttpServletRequest注入其他模型

SlingModels:从SlingHttpServletRequest注入其他模型
EN

Stack Overflow用户
提问于 2016-12-01 19:08:25
回答 3查看 1.4K关注 0票数 0

我的other question的一个原因是下面的用例:我想创建一个TextImageModel,它使用我的ImageModel作为注入属性并扩展我的TextModel:

代码语言:javascript
复制
@Model(adaptables = {SlingHttpServletRequest.class})
public class TextImageModel extends TextModel {

    @Inject
    private ImageModel image;
}

但这不管用。当我使用Resource作为适配项,但我也需要在我的ImageModel和TextModel中使用SlingHttpServletRequest时,就会出现这种情况:

代码语言:javascript
复制
@Model(adaptables = {SlingHttpServletRequest.class})
public class ImageModel {
    @SlingObject
    private SlingHttpServletRequest request;

    @SlingObject
    private Resource resource;
}

如何使用请求作为可适应的来注入ImageModel?图像资源是名为image的子资源

EN

回答 3

Stack Overflow用户

发布于 2016-12-02 17:00:01

您可以使用@Self而不是@Inject,但是您在ImageModel中将拥有与TextImageModel中相同的资源。而不是你想要的孩子“形象”。Afaik当从请求适配时,资源将始终从请求中读取。

代码语言:javascript
复制
@Model(adaptables = {SlingHttpServletRequest.class})
public class TextImageModel extends TextModel {

    @Self
    private ImageModel image;
}
票数 1
EN

Stack Overflow用户

发布于 2019-02-07 19:45:03

使用ModelFactory:

代码语言:javascript
复制
    ...
    import com.adobe.cq.wcm.core.components.models.Image;
    import org.apache.sling.models.factory.ModelFactory;
    ...
    @Inject 
    private ModelFactory modelFactory;
    @Self 
    private SlingHttpServletRequest request;

    private Image image;

    @PostConstruct 
    protected void postInit() {
            image = modelFactory.getModelFromWrappedRequest(request, resource.getChild("image"), Image.class);
    ...
    }

希望这能起到作用。

票数 1
EN

Stack Overflow用户

发布于 2016-12-01 19:27:58

如果您希望从特定类型而不是您的可适应类型进行注入,则可以使用@Inject @Via("resource")

更多信息请点击这里:https://sling.apache.org/documentation/bundles/models.html#via

不过,我不确定这是否适用于模型而不是属性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40909079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档