gpt4 book ai didi

java - 使用 freemarker(或任何其他模板引擎)处理多个嵌套模板

转载 作者:行者123 更新时间:2023-12-02 08:10:22 26 4
gpt4 key购买 nike

我正在尝试使用 FreeMarker 编写一个使用 servlet 的复杂网页。

该页面有 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 来实现此目的,我也可以使用其他模板解决方案。

最佳答案

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

关于java - 使用 freemarker(或任何其他模板引擎)处理多个嵌套模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7538696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com