在Magnolia 4.5.3中,如果没有为此定义,我正在尝试继承父页面的阶段。
Java类TemplatingFunctions
(在freemarker中公开为cmsfn
)提供了方法inherit(Node content)
,因此我尝试以下方法:
[#if component??]
[@cms.component content=component /]
[#else]
[#assign inheritedContent = cmsfn.inherit(cmsfn.content(state.mainContent.@handle)) /]
[@cms.component content=inheritedContent /]
[/#if]
但后来我收到了一个错误:
The 'content' parameter must be a ContentMapModel and is a StringModel.
(我的例子中的第6行)
为什么会出现此错误,即如何解决此类错误?
答案 0 :(得分:1)
我想问题是cmsfn.content(path)
会返回javax.jcr.Node
,因此重载的cmsfn.inherit
方法也会返回Node
,但@cms.component
需要info.magnolia.jcr.util.ContentMap
。所以,也许你应该用Node
将ContentMap
转换为cmsfn.asContentMap(someNode)
。 (我在不知道任何关于Magnolia的情况下告诉我,只是看看它的API javadoc,所以也许我错了。)
答案 1 :(得分:0)
我编写了自己的继承方法,手动搜索具有阶段的父节点,但最后,我返回new ContentMap(node)
而不是返回节点。