我的other question的一个原因是下面的用例:我想创建一个TextImageModel,它使用我的ImageModel作为注入属性并扩展我的TextModel:
@Model(adaptables = {SlingHttpServletRequest.class})
public class TextImageModel extends TextModel {
@Inject
private ImageModel image;
}但这不管用。当我使用Resource作为适配项,但我也需要在我的ImageModel和TextModel中使用SlingHttpServletRequest时,就会出现这种情况:
@Model(adaptables = {SlingHttpServletRequest.class})
public class ImageModel {
@SlingObject
private SlingHttpServletRequest request;
@SlingObject
private Resource resource;
}如何使用请求作为可适应的来注入ImageModel?图像资源是名为image的子资源
发布于 2016-12-02 17:00:01
您可以使用@Self而不是@Inject,但是您在ImageModel中将拥有与TextImageModel中相同的资源。而不是你想要的孩子“形象”。Afaik当从请求适配时,资源将始终从请求中读取。
@Model(adaptables = {SlingHttpServletRequest.class})
public class TextImageModel extends TextModel {
@Self
private ImageModel image;
}发布于 2019-02-07 19:45:03
使用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);
...
}希望这能起到作用。
发布于 2016-12-01 19:27:58
如果您希望从特定类型而不是您的可适应类型进行注入,则可以使用@Inject @Via("resource")
更多信息请点击这里:https://sling.apache.org/documentation/bundles/models.html#via
不过,我不确定这是否适用于模型而不是属性
https://stackoverflow.com/questions/40909079
复制相似问题