前一阵子在研究使用数据库来配置表现层的信息的技术可行性,由于之前已经使用FreeMarker封装了很多macro,很显然,
这些投资不能浪费,方案的选择上最终我确定在根据数据库的配置来动态生成Template,然后由FreeMarker引擎加载,那么
FreeMarker是如何加载Template的呢,是否能够支持非文件的Template的加载呢?
通过源码分析,FreeMarker对Template的加载过程如下
Configuration(getTemplate)-->TemplateCache(getTemplate)-->TemplateCache(loadTemplate)-->
TemplateLoader(getReader)
再看看TemplateLoader的接口
java 代码
- public interface freemarker.cache.TemplateLoader
- {
- Object findTemplateSource(String name) throws java.io.IOException;
- long getLastModified(Object source);
- Reader getReader(Object source, String name) throws java.io.IOException;
- void closeTemplateSource(Object source) throws java.io.IOException;
- }
很显然,就技术而言,问题的关键就在于怎么实现自己的TemplateLoader了
分享到:
相关推荐
4. **代码生成逻辑**:这通常是Java代码的一部分,负责创建数据模型,加载模板,并调用FreeMarker的`Template`类的`process`方法,将数据模型和模板结合,生成最终的代码。 在描述中提到的CSDN博客文章"42193235...
6. **模板与数据合并**:使用FreeMarker的`Template`类加载模板文件,然后用`process`方法将数据模型应用到模板上,生成最终的Word文档。 7. **POM.xml**:在Maven项目中,`pom.xml`文件是项目的配置文件,用于定义...
- **创建配置对象**:使用`Configurable`接口的实现类`freemarker.template.Configuration`初始化配置。 - **加载模板**:使用`Configuration`对象的`getTemplate()`方法加载模板文件。 - **构建数据模型**:创建...
1. Servlet容器集成:在Servlet环境中,通常通过`Template`类加载模板文件,使用`Configuration`配置管理模板。 2. 数据模型设置:通过`ModelAndView`或`Map`将Java对象传递到视图,供Freemarker使用。 3. 视图...
import freemarker.template.Template; import java.io.*; import java.util.HashMap; import java.util.Map; public class CreateDoc { private Configuration configuration = null; public CreateDoc() ...
使用FreeMarker的`Template`类加载模板,并用`Configuration`实例渲染数据模型: ```java Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg.setClassForTemplateLoading(this....
通过设置`setClassForTemplateLoading`方法,指定了模板文件的加载位置,通常这些模板文件是以`.ftl`(Freemarker Template Language)扩展名存储的。 #### 2. 获取Template对象 在配置好`Configuration`后,接...
尽管Freemarker本身对JDK版本的要求并不高,通常支持J2SE 5.0及更高版本,但使用Java 1.8可以充分利用其新特性,如 Lambda表达式 和 Stream API,提高代码的简洁性和效率。 2. Freemarker基本概念: - 模板...
Freemarker是一个强大的模板引擎,常用于...通过学习和运行这些示例,你可以更直观地理解Freemarker解析生成PDF的完整流程。在实践中,不断调整和优化模板设计,以及合理组织数据模型,可以使生成的PDF更加专业和高效。
2. **加载模板**:然后,使用FreeMarker API加载`Product.ftl`模板文件。 3. **设置模板数据**:将之前创建的数据模型绑定到模板中,使模板变量能够被正确的值替换。 4. **生成Word文档**:最后,通过FreeMarker的...
FTL是Freemarker Template Language的缩写,它是一种声明式的标记语言,用于定义如何将数据模型渲染成可输出的文本。在FTL文件中,你可以插入静态文本、控制结构(如循环和条件语句)以及对数据模型的引用。 在我们...
在实际开发中,你可能还会遇到如何设置单元格样式、合并单元格、添加图表等问题,这都需要对Freemarker和相关库有深入的理解和实践。通过不断学习和实践,你可以熟练掌握这个功能,为用户提供高效、便捷的数据导出...
5. **模板解析(Template Parsing)**:源码中会包含Freemarker如何解析模板文件,将其转化为抽象语法树(AST)的过程。 6. **模板执行(Template Execution)**:Freemarker通过`Template`类来执行模板,将数据...
import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util....
`freemarker-2.3.23.jar`是Freemarker库的一个版本,发布于2.3.23,这个版本可能包含了对早期版本的一些改进、新功能或bug修复。 Freemarker的核心概念是模板语言,它是一种声明式的编程方式,允许开发者编写不包含...
import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.HashMap; ...
- **高效性能**:FreeMarker对模板进行预编译,提高执行效率。 - **灵活性**:支持条件语句(`<#if>`)、循环(`<#foreach>`)、宏定义等复杂的逻辑控制。 - **强大的数据处理**:内置函数和操作符,如字符串拼接、...
为了使用Freemarker,开发者首先需要创建一个`Configuration`实例,并对其进行必要的配置。例如,设置模版的加载路径、数据模型的处理方式等。这一步骤确保了Freemarker能够正确地识别和处理模版。 ```java ...
这个过程比较复杂,通常需要对Word文档的XML结构有深入理解。 总的来说,通过Java和FreeMarker,我们可以方便地生成包含图片的Word文档。虽然这个示例只支持.doc格式,但通过扩展可以支持.docx或者其他格式。要了解...