渲染不属于 JCR 的节点
Posted
技术标签:
【中文标题】渲染不属于 JCR 的节点【英文标题】:Rendering a node that is not part of the JCR 【发布时间】:2020-06-30 11:38:06 【问题描述】:我想渲染一个不在 JCR 存储中的页面。我在文件中有页面结构。我们正在运行 Magnolia 5.6.13,根据 this 可以做到这一点,但我不清楚如何做到这一点。是我必须覆盖的 RenderingModelImpl#getContent 还是我必须覆盖的 AbstractRenderer 类方法? 谢谢, 安娜
【问题讨论】:
【参考方案1】:您尝试加载/渲染的文件中究竟有什么内容?只是 html 或 freemarker 模板或由其他模板语言制作的模板,还是它实际上代表了您通常在 JCR 中仅来自文件而不是来自 JCR 的页面?估计是最后一个了如果是这种情况,并且您想尽可能多地利用 Magnolia 提供的 ootb,您需要覆盖 getContent()
方法,在该方法中加载您的文件并创建 Content
由该方法返回的对象(可能想使用来自magnolia-core-test
jar 的MockContent
来测试这个)。基本上将页面的文件表示形式转换为内容。
AbstractRenderer
应仅在您尝试替换渲染引擎生成的模板语言或输出类型时被覆盖,而不是在您尝试为其提供不同的输入时被覆盖。
【讨论】:
谢谢@Jan 是的,它是最后一个,代表一个通常从 JCR 呈现的页面,只是来自文件而不是来自 JCR。就像你说的那样,我需要返回一个我以某种方式在内存中构建的新 Content 对象。 嗨@Jan 您能否详细说明您在使用 magnolia-core-test 中的 MockContent 时的意思。 测试使用的类实现了javax.jcr.Content
接口,称为MockContent
,您可以使用基于文件的页面结构中的信息填充该类。就这样。但是,对于生产用途,您无论如何都希望使用自己的 Content
接口实现,所以如果您不知道在哪里可以找到它以及如何将 magnolia-core-test.jar 添加到您的构建中,那么您可以去提前并自己实现它。以上是关于渲染不属于 JCR 的节点的主要内容,如果未能解决你的问题,请参考以下文章