我有一个属性,其中包含内容文件中所需页面的路径
...
<some_block
...
sling:resourceType="some_path_to_some_component"
somePage="some_path_to_page"
.../>
...
合适的HTL组件部分.html
<div data-sly-use.some_model="org.example.SomeModel">
...
</div>
和模型类 SomeModel.java
package org.example;
...
import com.day.cq.wcm.api.Page;
...
@Model(adaptables = { SlingHttpServletRequest.class, Resource.class },
defaultInjectionStrategy = DefaultInjectionStrategy.REQUIRED)
public class RelatedContentBlock {
@ValueMapValue
private Page somePage;
...
}
我可以使用@Inject和@Via注释轻松获取所需的 Page 对象,但为什么我不能使用 @ValueMapValue 注释获取它?我尝试使用所有可能的变体,包括通过属性等。是的,我可以从页面管理器中获取它,但是@ValueMapValue有什么问题?
提前感谢!
您链接的@ValueMapValue
注释的文档具有您正在寻找的答案:
用于方法、字段或构造函数参数的注释,以允许 Sling 模型从当前资源的价值映射中注入值。
重要的部分是:
从值映射中注入值
Page
不是ValueMap
.因此,此批注不能用于注入页面。
此批注主要用于注入页面属性。因为页面属性(或资源属性(存储在ValueMap
中。这就是为什么您可以使用@ValueMapValue
注释来注入页面的jcr:title
:
@ValueMapValue(name = "jcr:title")
private String title;
这等效于(伪代码(:
final ValueMap pageProperites = Page.getProperties();
final String title = pageProperties.get("jcr:title", "" /* default */);