SlingModel 未正确映射 JCR
SlingModel not mapping the JCR properly
我有一个名为 TextModel
的 SlingModel。
@Model(adaptables=Resource.class, defaultInjectionStrategy= DefaultInjectionStrategy.OPTIONAL)
public class TextModel {
@Inject
private String heading;
@Inject
private String description;
public String getHeading() {
return heading;
}
public String getDescription() {
return description;
}
}
我在 Sightly 中也有一个呈现组件的模板:
<div data-sly-use.model="project.components.slingmodels.text.TextModel" data-sly-unwrap/>
<div>
<p>PageModel component</p>
<h1>${model.heading}</h1>
<p>Description: ${model.description}</p>
</div>
然后我将组件嵌入到页面中:
<div data-sly-resource="${@ resourceType='project/components/textModel'}" data-sly-unwrap></div>
并通过 JSON:
创建初始 JCR 结构
{
"jcr:primaryType": "nt:unstructured",
"sling:resourceType": "project/pages/page",
"title" : "Welcome page",
"jcr:content" : {
"myContent" : {
"jcr:primaryType": "nt:unstructured",
"sling:resourceType" : "project/components/textModel",
"heading": "Heading",
"description": "test description"
}
}
}
所有字段都正确保存在 JCR 中,但我的 Sling 模型 returns 为空,作为 heading
和 description
的值。
但是,当我创建这样的内容时:
{
"jcr:primaryType": "nt:unstructured",
"sling:resourceType": "project/pages/page",
"title" : "Welcome page",
"heading": "Heading",
"description": "test description",
"jcr:content" : {
"myContent" : {
"jcr:primaryType": "nt:unstructured",
"sling:resourceType" : "project/components/textModel"
}
}
}
有效。 JSON 存储在我的项目文件中的 jcr_root/content/hello.json
下,我在浏览器中打开 localhost:8080/content/hello.html
URL。
您应该将您的组件包含在正确的路径中,否则该路径指向当前资源,该资源是当前页面的jcr:content。
<div data-sly-resource="${ @path='componentPath',
resourceType='project/components/textModel'}" data-sly-unwrap></div>
我建议使用:
<div data-sly-resource="${'myContent' @ resourceType='project/components/textModels'}" data-sly-unwrap></div>
甚至更好:
<sly data-sly-resource="${'myContent' @ resourceType='project/components/textModels'}"></sly>
我有一个名为 TextModel
的 SlingModel。
@Model(adaptables=Resource.class, defaultInjectionStrategy= DefaultInjectionStrategy.OPTIONAL)
public class TextModel {
@Inject
private String heading;
@Inject
private String description;
public String getHeading() {
return heading;
}
public String getDescription() {
return description;
}
}
我在 Sightly 中也有一个呈现组件的模板:
<div data-sly-use.model="project.components.slingmodels.text.TextModel" data-sly-unwrap/>
<div>
<p>PageModel component</p>
<h1>${model.heading}</h1>
<p>Description: ${model.description}</p>
</div>
然后我将组件嵌入到页面中:
<div data-sly-resource="${@ resourceType='project/components/textModel'}" data-sly-unwrap></div>
并通过 JSON:
创建初始 JCR 结构{
"jcr:primaryType": "nt:unstructured",
"sling:resourceType": "project/pages/page",
"title" : "Welcome page",
"jcr:content" : {
"myContent" : {
"jcr:primaryType": "nt:unstructured",
"sling:resourceType" : "project/components/textModel",
"heading": "Heading",
"description": "test description"
}
}
}
所有字段都正确保存在 JCR 中,但我的 Sling 模型 returns 为空,作为 heading
和 description
的值。
但是,当我创建这样的内容时:
{
"jcr:primaryType": "nt:unstructured",
"sling:resourceType": "project/pages/page",
"title" : "Welcome page",
"heading": "Heading",
"description": "test description",
"jcr:content" : {
"myContent" : {
"jcr:primaryType": "nt:unstructured",
"sling:resourceType" : "project/components/textModel"
}
}
}
有效。 JSON 存储在我的项目文件中的 jcr_root/content/hello.json
下,我在浏览器中打开 localhost:8080/content/hello.html
URL。
您应该将您的组件包含在正确的路径中,否则该路径指向当前资源,该资源是当前页面的jcr:content。
<div data-sly-resource="${ @path='componentPath',
resourceType='project/components/textModel'}" data-sly-unwrap></div>
我建议使用:
<div data-sly-resource="${'myContent' @ resourceType='project/components/textModels'}" data-sly-unwrap></div>
甚至更好:
<sly data-sly-resource="${'myContent' @ resourceType='project/components/textModels'}"></sly>