cmsfn.inherit()似乎返回错误的类型

时间:2012-08-23 09:51:34

标签: freemarker magnolia

在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行)

为什么会出现此错误,即如何解决此类错误?

2 个答案:

答案 0 :(得分:1)

我想问题是cmsfn.content(path)会返回javax.jcr.Node,因此重载的cmsfn.inherit方法也会返回Node,但@cms.component需要info.magnolia.jcr.util.ContentMap。所以,也许你应该用NodeContentMap转换为cmsfn.asContentMap(someNode)。 (我在不知道任何关于Magnolia的情况下告诉我,只是看看它的API javadoc,所以也许我错了。)

答案 1 :(得分:0)

我编写了自己的继承方法,手动搜索具有阶段的父节点,但最后,我返回new ContentMap(node)而不是返回节点。