2011-09-24 83 views
0

我想使用FreeMarker使用servlet编写复杂的网页。使用freemarker(或任何其他模板引擎)处理多个嵌套模板

该页面有3个基本组件:顶部的导航栏,左侧的广告栏和中间的主要内容部分。我有一个单独的servlet来绘制其中的每一个。每个servlet只是生成一个html5部分,可能会或可能不会使用freemarker。

以上所有内容均属于主网页内部,并以freemarker模板化。

问题是这样的。 主要页面的模板看起来是这样的(条纹阄简单):

<html> 
    <body> 
    <!--lots of stuff in between--> 

    <section-nav> <!--this should be filled by output of NavServlet.respond --> 

    <!--lots of stuff in between--> 

    <section-content> <!-- this comes from arbitrary servlet for actual content --> 

    <section-advertise> <!--this should be filled by output of AdvertiseServlet --> 

    </body> 
</html 

如何使用FreeMarker的处理上面的结构? 如果我为主页做template.process(),它会写html开始和结束标记,但我想要的是让其他servlet(导航,广告等)有机会在html结束标记之前生成内容。

如果我们不能使用FreeMarker来做到这一点,我也可以使用其他模板解决方案。

回答

2

您应该实现TemplateDirectiveModel以在Java中创建自定义指令(而不是在FTL中,即使用#macro)。当从一个模板(如<@my.embed source="thisAndThatServlet" />)中调用时,它将收到一个Writer,并且您可以随意写入任何内容。因此,当然,您可以包含其他servlet,或者执行Java中可用的任何操作。 (支持嵌套Template.process调用。)以freemarker.ext.servlet.IncludePage的源代码为例。

+0

谢谢,帮了一点点 –