`
510120804
  • 浏览: 30779 次
  • 性别: Icon_minigender_1
  • 来自: 襄阳
社区版块
存档分类
最新评论

在Freemarker的模板文件中引用html文件的路径问题

阅读更多

在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 一样,都是相对于 cfg.setDirectoryForTemplateLoading(new File("bin")); 这个目录的吧。。。。

分享到:
评论

相关推荐

    freemarker模板使用

    在这个"freemarker模板使用"的讨论中,我们将深入探讨Freemarker的核心概念、语法以及如何在实际项目中进行图片插入。 1. **核心概念**: - **模板(Template)**:Freemarker模板是包含固定文本和变量的文本文件...

    freemarker根据word模板生成word的完整示例

    Freemarker是一个基于模板的语言,它的核心是模板文件,模板文件中包含了一系列控制结构(如条件语句、循环)和变量引用。这些变量是由后台Java代码提供,模板引擎会将这些变量替换为实际值,然后生成最终的输出文档...

    struts2中jsp和freemarker模板视图的案例

    在模板文件中,使用Freemarker语法(如`${}`)来引用Action的属性。案例中的Freemarker文件可能包含各种控制结构(如`&lt;#if&gt;`,`&lt;#foreach&gt;`等)和数据展示语句,它们与Action的返回值进行交互,生成最终的HTML输出。...

    eclipse中FreeMarkerIDE插件

    FreeMarkerIDE插件支持与Eclipse的Java项目无缝集成,你可以直接在Java控制器中指定模板文件路径,并在Eclipse中调试模板。 **6. 自定义配置** FreeMarkerIDE插件允许你自定义模板配置,如编码格式、模板加载器、...

    freemarker wrod 统计图的生成

    4. **数据传递**: 将图片的URL或本地路径作为数据传递给FreeMarker模板。在模板中使用`&lt;img&gt;`标签引用图片。 5. **FreeMarker渲染**: 使用FreeMarker API将模板与数据结合,生成Word文档。Java的`freemarker....

    freemarker-2.3.30模板word导出.zip

    开发者需要将这个jar包添加到项目的类路径中,以便能够运行相关的Java代码。 5. **操作说明**: 压缩包可能包含一份指南,详细说明如何配置和使用提供的Java代码和模板来导出Word文档。这可能涵盖模板的编写规则,...

    freemarker 与sitemesh 整合例子

    2. **创建Freemarker模板**:然后,创建Freemarker模板文件,如`index.ftl`,在其中编写HTML结构,同时插入`${...}`表达式来引用数据模型中的变量。 3. **配置Freemarker**:在应用的配置文件中,设置Freemarker的...

    Java freemarker demo 【struts + freemarker】 自己修改的一个小例子

    在FreeMarker模板文件(通常以`.ftl`为扩展名)中,我们可以使用FreeMarker语法来引用模型对象的属性。例如,`&lt;#assign user = actionBean.user&gt;`可以将`actionBean`中的`user`属性赋值给FreeMarker变量`user`,然后...

    freemarker-2.3.28.jar

    在实际应用中,开发者通常会将这个JAR文件添加到项目的类路径(classpath)中,以便在运行时能够解析和执行Freemarker模板。如果在Eclipse中使用,可以将该JAR文件添加到项目的构建路径,确保项目能正确识别并利用...

    freemarker实例,真实

    在这个实例中,由于使用的是相对路径,所以模板文件应当放在项目的某个可访问目录下。 4. **创建模板文件** 模板文件(如:`example.ftl`)包含HTML结构,其中动态内容用Freemarker语法表示。例如: ```html ...

    SpringBoot2 整合FreeMarker模板,完成页面静态化处理.docx

    【SpringBoot2 整合FreeMarker模板,完成页面静态化处理】 在Web开发中,页面静态化是一种提高网站性能和用户体验的技术。它涉及到将原本动态生成的页面转换为静态HTML文件,减少对服务器的依赖,加快页面加载速度...

    freemarker-2.3.23.zip

    在这个案例中,"freemarker-2.3.23.jar"很可能就是FreeMarker库的JAR文件,包含了所有必要的类和资源,用于在Java应用中使用FreeMarker模板引擎。 关于压缩包子文件的文件名称列表,只有一个"freemarker-2.3.23.jar...

    FreeMarker的一个DEMO

    - `WEB-INF`: 存放Servlet配置文件和FreeMarker模板文件。 - `src/main/java`: Java源代码,可能包括控制器、服务和模型类。 - `src/main/resources`: 配置文件和其他资源。 - `webapp`: 静态资源如CSS、...

    nutz的freemarker视图插件

    - 开发者创建Freemarker模板文件(`.ftl`扩展名),放置在指定的模板目录下。 - 模板中可以引用Java对象,通过`&lt;#...&gt;`和`${...}`语法进行数据绑定和逻辑处理。 3. **数据传递**: - 在Controller层,通过...

    Java用freemarker导出word例子

    配置FreeMarker,设置模板文件的路径,以及数据模型。 6. **步骤四:渲染模板** 使用FreeMarker的`Template`类和数据模型来渲染模板,生成`.ftl`文件的输出。 7. **步骤五:使用docx4j将HTML转换为Word** 将...

    freemarker01_02

    4. 数据安全:处理文件路径和内容时,注意防止路径遍历攻击和注入问题。 5. 模板缓存:理解FreeMarker的缓存机制,以优化性能,避免不必要的文件读写操作。 这两个视频教程为初学者提供了良好的起点,帮助他们快速...

    freemarker入门文档及例子

    1. 模板:Freemarker模板是纯文本文件,其中包含静态文本和控制结构,如条件语句和循环。它们用来生成最终输出。 2. 数据模型:这是Java对象集合,由应用程序提供给Freemarker,模板中的变量引用这些对象来生成输出...

    freemarker实例下载

    - 数据绑定:Controller中的数据会被自动注入到Freemarker模板中,通过`${variable}`引用。 5. **优点与应用场景** - 逻辑分离:Freemarker让开发者专注于页面展示,而无需关心HTML的细节,有利于提高开发效率。 ...

    freemarker与Struts2.0的dome

    - 在Struts2的Action类中,定义方法处理用户请求,返回一个字符串结果,这个结果将与Freemarker模板关联。 - 在`struts.xml`中,为Action类的每个方法配置结果,如`&lt;result name="success"&gt;myfreemarker.ftl...

    freemarker --struts中的应用

    在实际开发中,为了更好地管理和使用FreeMarker模板,通常会将它们放在`src/main/resources/templates`目录下,对应于项目结构中的`src`文件夹。Struts配置文件(struts.xml或struts.properties)中需要指定...

Global site tag (gtag.js) - Google Analytics