【问题标题】:HippoCMS component for custom document type not calling document bean自定义文档类型的 HippoCMS 组件不调用文档 bean
【发布时间】:2015-03-24 02:27:30
【问题描述】:

我在 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。我做错了什么?

【问题讨论】:

    标签: java hippocms


    【解决方案1】:

    您需要调用 document.getTitle() 因为值是延迟加载的。

    【讨论】:

    • 如果这行得通,我会自发地僵尸化并吃掉我自己的大脑。我昨晚试过了,但这是在解决我的站点地图中的问题之前,我从未想过再试一次。
    • 玩了很多之后,我意识到我的sitemapitem 节点丢失了它的hst:componentconfigurationid 值。修复此问题后,我确定无论我使用 request.setAttribute() 设置什么属性,它们在 JSP 上下文中都不可用……即使传递字符串文字也不起作用。通过调试器检查 Request 变量似乎表明属性没有被保存。有什么想法吗?
    • 我在第二条评论中描述的问题是一个不相关的配置问题(hst:componentclassname 属性设置在 hst:pages/SampleCaps 节点中,而不是应该设置的 hst:pages/SampleCaps/main。 ) Marijan 的回答毕竟是正确的。
    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    相关资源
    最近更新 更多