SlingModels: внедрение другой модели из запроса SlingHttpServletRequest

Одной из причин моего другого вопроса является следующий вариант использования: я хочу создать TextImageModel, который использует мой ImageModel как внедренное свойство и расширяет мой TextModel:

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

    @Inject
    private ImageModel image;
}

Но это не работает. Это должно работать, когда я буду использовать Resource как адаптируемый, но мне нужно SlingHttpServletRequest в моей ImageModel и TextModel, а также:

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

    @SlingObject
    private Resource resource;
}

Как я могу ввести ImageModel, используя запрос как адаптируемый? Ресурс изображения является дочерним ресурсом с именем image

2 ответа

Используйте ModelFactory:

    ...
    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);
    ...
    }

Надеюсь, это должно сработать.

Вы можете использовать @Self вместо @Inject, но у вас будет тот же ресурс в ImageModel, что и в TextImageModel. Не детский "имидж", как хотелось бы. Afaik при адаптации из запроса, ресурс всегда будет читаться из запроса.

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

    @Self
    private ImageModel image;
}

Если вы хотите сделать инъекцию из определенного другого типа, чем ваш адаптируемый, то вы можете использовать @Inject @Via("resource")

больше здесь: https://sling.apache.org/documentation/bundles/models.html

Я не уверен, будет ли это работать с моделью, а не со свойством

Другие вопросы по тегам