【发布时间】:2015-08-15 19:23:36
【问题描述】:
我使用 FreeMarker。我现在需要的是 smarty (php world) 中的模板继承。
我有一个 base.ftl,所有的 javascript 和 css 内容都将被加载:
(简体:)
<html>
<head>
<title>MyApp</title>
</head>
<body>
${content}
</body>
</html>
假设我有一个用于列出用户的模板 (users.ftl):
<ul>
<li>User1</li>
<li>User2</li>
</ul>
我做了一些研究,发现我可以使用<#include "...">,但我相信还有另一种优雅的方式。
还有一个问题:如果我想在 ${content} 中添加 users.ftl AND products.ftl 的输出怎么办:
<ul>
<li>Product1</li>
<li>Product2</li>
</ul>
控制器的外观如何? 目前我的样子:
package org.domain.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller("indexController")
public class IndexController {
@RequestMapping("/login")
public String indexAction(Model model) {
model.addAttribute("content", "How to get the output of users.ftl and products.ftl??");
return "base";
}
}
【问题讨论】:
-
查看命名空间并导入。 freemarker.org/docs/dgui_misc_namespace.html
-
我会使用
#import+#macro而不是#include,但这在方法上并没有太大的不同。那么为什么你希望它成为一个变量呢?此外,您可以在数据模型中指定实际内容模板的名称,而不是其输出。 -
或者,也许这个动作应该直接使用你在这里调用的
content.ftl,而content.ftl应该像<@base.page>...</@base.page>或其他东西一样将base.ftl拉到自己周围。 -
实际上,我只是想要一个基本模板,在其中定义我所有视图共有的所有脚本和样式标签。在我的控制器中,我希望能够创建任意数量的视图并显示它们。目前我只能通过返回 ftl 文件的名称在我的控制器中调用一个模板。
-
考虑为您的项目添加 apache tile,它与 ftl 和 spring 很好地集成,提供开箱即用的模板继承。
标签: java spring spring-mvc freemarker