自定义文档类型的 HippoCMS 组件不调用文档 bean
HippoCMS component for custom document type not calling document bean
我在 HippoCMS 7.9 站点中创建了一个名为 SampleCaps 的复合文档类型,并着手为其构建模板。在此过程中,我添加了 hst:sitemap
个节点、一对嵌套的 hst:pages
个节点和一个 hst:templates
个节点。我还添加了适当的 type
属性 到 hippo:namespaces/barcom/SampleCaps
.
最后,我创建了一个组件和一个 Bean 来将文档数据公开给模板,并采用了 Hippo Video Trails 第 2 部分中介绍的步骤。
令我沮丧的是,当组件正确加载时,Bean 从未加载(或者至少,它的 getter 从未被调用。)我的组件和 bean 如下:
site/src/main/java/com/footech/barcom/components/SampleCapsComponent.java:
package com.footech.barcom.components;
import com.footech.barcom.beans.SampleCapsDocument;
import org.hippoecm.hst.content.beans.standard.HippoBean;
import org.hippoecm.hst.component.support.bean.BaseHstComponent;
import org.hippoecm.hst.core.component.HstComponentException;
import org.hippoecm.hst.core.component.HstRequest;
import org.hippoecm.hst.core.component.HstResponse;
public class SampleCapsComponent extends BaseHstComponent {
@Override
public void doBeforeRender(final HstRequest request, final HstResponse response) throws HstComponentException {
SampleCapsDocument document = request.getRequestContext().getContentBean();
request.setAttribute("document", document);
System.out.println("Ping"); /* prints "Ping" to console */
}
}
site/src/main/java/com/footech/barcom/beans/SampleCapsDocument.java:
package com.footech.barcom.beans;
import java.util.Calendar;
import org.hippoecm.hst.content.beans.Node;
import org.hippoecm.hst.content.beans.standard.HippoHtml;
import org.onehippo.cms7.essentials.dashboard.annotations.HippoEssentialsGenerated;
@HippoEssentialsGenerated(internalName = "barcom:SampleCapsdocument")
@Node(jcrType = "barcom:SampleCapsdocument")
public class SampleCapsDocument extends BaseDocument {
@HippoEssentialsGenerated(internalName = "barcom:title")
public String getTitle() {
System.out.println("Pong"); /* This never triggers */
return getProperty("barcom:title");
}
}
根据我的理解,SampleCapsComponent.java 中的注释 @Node(jcrType = "barcom:SampleCapsdocument")
应该向编译器提示内容节点应该用 SampleCapsDocument bean 包装 - 这似乎不是这种情况,因为调试控制台打印 Ping
但不打印 Pong
。我做错了什么?
您需要调用 document.getTitle(),因为值是延迟加载的。
我在 HippoCMS 7.9 站点中创建了一个名为 SampleCaps 的复合文档类型,并着手为其构建模板。在此过程中,我添加了 hst:sitemap
个节点、一对嵌套的 hst:pages
个节点和一个 hst:templates
个节点。我还添加了适当的 type
属性 到 hippo:namespaces/barcom/SampleCaps
.
最后,我创建了一个组件和一个 Bean 来将文档数据公开给模板,并采用了 Hippo Video Trails 第 2 部分中介绍的步骤。
令我沮丧的是,当组件正确加载时,Bean 从未加载(或者至少,它的 getter 从未被调用。)我的组件和 bean 如下:
site/src/main/java/com/footech/barcom/components/SampleCapsComponent.java:
package com.footech.barcom.components;
import com.footech.barcom.beans.SampleCapsDocument;
import org.hippoecm.hst.content.beans.standard.HippoBean;
import org.hippoecm.hst.component.support.bean.BaseHstComponent;
import org.hippoecm.hst.core.component.HstComponentException;
import org.hippoecm.hst.core.component.HstRequest;
import org.hippoecm.hst.core.component.HstResponse;
public class SampleCapsComponent extends BaseHstComponent {
@Override
public void doBeforeRender(final HstRequest request, final HstResponse response) throws HstComponentException {
SampleCapsDocument document = request.getRequestContext().getContentBean();
request.setAttribute("document", document);
System.out.println("Ping"); /* prints "Ping" to console */
}
}
site/src/main/java/com/footech/barcom/beans/SampleCapsDocument.java:
package com.footech.barcom.beans;
import java.util.Calendar;
import org.hippoecm.hst.content.beans.Node;
import org.hippoecm.hst.content.beans.standard.HippoHtml;
import org.onehippo.cms7.essentials.dashboard.annotations.HippoEssentialsGenerated;
@HippoEssentialsGenerated(internalName = "barcom:SampleCapsdocument")
@Node(jcrType = "barcom:SampleCapsdocument")
public class SampleCapsDocument extends BaseDocument {
@HippoEssentialsGenerated(internalName = "barcom:title")
public String getTitle() {
System.out.println("Pong"); /* This never triggers */
return getProperty("barcom:title");
}
}
根据我的理解,SampleCapsComponent.java 中的注释 @Node(jcrType = "barcom:SampleCapsdocument")
应该向编译器提示内容节点应该用 SampleCapsDocument bean 包装 - 这似乎不是这种情况,因为调试控制台打印 Ping
但不打印 Pong
。我做错了什么?
您需要调用 document.getTitle(),因为值是延迟加载的。