您的位置:首页 > 其它

关于freemarker include文件路径的问题

2013-06-21 10:40 357 查看
在freemarker中可以使用 #include 命令引入其他的文件。

但是今天自己在写代码的时候遇到一个问题,比如我的代码目录结构是这样的:



我在freemarker下面的一个java代码里面写了如下代码:

package freemarker;

import java.io.File;

import java.io.IOException;

import java.io.StringWriter;

import java.io.Writer;

import java.util.HashMap;

import java.util.Map;

import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;

public class TestInclude {

private Configuration cfg = null;

public Configuration getCfg() {

return cfg;

}

public void init() throws IOException {

cfg = new Configuration();

cfg.setDirectoryForTemplateLoading(new File("bin/freemarker"));

}

public static void main(String args[]) throws IOException, TemplateException {

TestInclude obj = new TestInclude();

obj.init();

Map root = new HashMap();

Template t = obj.getCfg().getTemplate("TestInclude.ftl");

Writer out = new StringWriter();

t.process(root, out);

System.out.println(out.toString());

}

}

然后在TestInclude.ftl 中引入如下:

<html>

<head>  

<title>Testpage</title>

</head>

<body>

 <h1>Testpage</h1>  

<p>Blahblah...

<#include "/free/test.ftl">

</body>

</html> 

结果就抛异常了,找不到free/test.ftl

郁闷。于是改成<#include "bin/free/test.ftl"> 喔,还是不行

继续,改成<#include "../bin/free/test.ftl"> ,这样也不行呀?

最后的解决方法如下:

public class TestInclude {

private Configuration cfg = null;

public Configuration getCfg() {

return cfg;

}

public void init() throws IOException {

cfg = new Configuration();

cfg.setDirectoryForTemplateLoading(new File("bin"));

}

public static void main(String args[]) throws IOException, TemplateException {

TestInclude obj = new TestInclude();

obj.init();

Map root = new HashMap();

Template t = obj.getCfg().getTemplate("/freemarker/TestInclude.ftl");

Writer out = new StringWriter();

t.process(root, out);

System.out.println(out.toString());

}

}

然后在TestInclude.ftl中如下写:

<#include "/free/test.ftl">

是不是可以这样理解,就算是include中的路径,和TestInclude。ftl 一样,都是相对于[b] cfg.setDirectoryForTemplateLoading(new File("bin")); 这个目录的吧。。。。[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: