我尝试使用FreeMarker创建html file
。
但是当我运行程序时会抛出错误:
Error reading included file "./common/header.ftl":
Template "./common/header.ftl" not found.
The failing instruction:
==> #include "./common/header.ftl" [in template "helloworld.ftl" at line 1, column 1]
的 helloworld.ftl: 的
<#include "./common/header.ftl">
<#if container??>
<div ="${container}">
<#else>
<div ="default">
</#if>
<ul>
<#list systems as system>
<li>${system_index + 1}.${system.getName()}</li>
</#list>
</ul>
<h1>${exampleObject.getName()}</h1>
</div>
<#include "./common/footer.ftl">
代码片段:
public static void main(String[] args) {
// Configuration
Writer file = null;
Configuration cfg = new Configuration();
try {
// Set Directory for templates
cfg.setDirectoryForTemplateLoading(new File("templates"));
// load template
Template template = cfg.getTemplate("helloworld.ftl");
// data-model
Map<String, Object> input = new HashMap<String, Object>();
input.put("message", "vogella example");
input.put("container", "test");
// create list
List<ValueExampleObject> systems = new ArrayList<ValueExampleObject>();
内部文件header.ftl
和footer.ftl
进入template/common
(进入template
正好是helloworld.ftl和常见文件)。
- 为什么会这样? - 如何解决这个问题?
答案 0 :(得分:1)
它应该像这样工作。如果您有common
VS commons
或.txt
vs .ftl
等疏忽,请仔细检查。或者,也许您有两个templates
目录,并且都有一个helloworld.ftl
但其中一个目录中没有common
?我问,因为你的模板目录(new File("templates")
)是相对于当前工作目录的,这可能是很多混乱的根源。永远不要这样做,它非常脆弱。使用绝对File
。
与问题无关,,但该示例包含严重丑陋的内容:
此:
<#if container??>
<div class="${container}">
<#else>
<div class="default">
</#if>
可以简单地写成:
<div class="${container!'default'}">
此外,${system.getName()}
等(即getter方法调用)可以写成${system.name}
。