嵌套区域Magnolia

时间:2017-05-31 14:19:27

标签: java freemarker magnolia

我正在创建自己的模块,并希望创建一个带有一些孩子的嵌套区域。我正在创建自己的巢,如

<div id="feedGroup">
   [@cms.area name="example"/]
   [@cms.area name="feed"/]
</div>

我的一个领域:

@Area("example")
    @AvailableComponentClasses({Example.class})
    public static class ExampleArea {

        @RequestMapping("/main/example")
        public String render() {
            return "pages/areas/example.ftl";
        }
    }

我的ftl示例:

[@cms.component content=component/]

我的ftl Feed:

[#list components as component]
    [@cms.component content=component/]
[/#list]

我想做什么(遵循此link):

@Area("feed")
@Controller
@AvailableComponentClasses({ContentFeed.class})
public static class ContentFeedArea {

    @Area("example")
    @AvailableComponentClasses({Example.class})
    public static class ExampleArea {

        @RequestMapping("/main/example")
        public String render() {
            return "pages/areas/example.ftl";
        }
    }

    @RequestMapping("/main/contentFeed")
    public String render() {
        return "pages/areas/contentFeed.ftl";
    }
}

它给了我错误:&#39;内容&#39;参数已传递但未指定或错误指定。有人可以启发我或指导我如何正确吗?

2 个答案:

答案 0 :(得分:0)

IIRC区域不能有嵌套区域,因为它是直接的孩子。

达到预期效果:

  • 将顶部区域定义为单个组件区域(可能该组件甚至自动生成,因此它始终处于此状态)和
  • 在上面定义的组件中,定义所需的嵌套区域。

答案 1 :(得分:0)

问题是您只在控制器中定义了嵌套区域。您还应该将它们嵌套在模板中:

<div id="feedGroup">
    [@cms.area name="feed"/]
</div>

pages/areas/contentFeed.ftl的内容:

<div>
   [@cms.area name="example"/]       
</div>

模板pages/areas/example.ftl应为:

[#list components as component]
    [@cms.component content=component/]
[/#list]