在日常开发中,我们有时候需要发送短信、邮件等通知,但是这些通知的内容通常都是动态的,而且可能会发生变动,为了程序的灵活性,我们通常会将通知的内容配置在页面上,然后后台通过渲染这些模板,来获取具体的内容。而 freemarker 正好可以帮助我们来完整模板的渲染这一步。
需求:
1、给定一个字符串模板,渲染出内容
2、修改这个字符串模板,然后再次渲染
实现要点:
1、模板的加载器需要使用 StringTemplateLoader
2、模板不可使用 Configuration.getTemplate,而应该使用 new Template
3、StringTemplateLoader 上的一段注释
完整代码如下:
@Test public void test001() throws Exception { String templateName = "hello-template"; String templateValue = "hello,${name}"; Configuration configuration = configuration(); processTemplate(configuration, templateName, templateValue); // -------------------- 进行模板的修改 ------------------------ templateValue = "hello,${name},我今年,${age}岁."; processTemplate(configuration, templateName, templateValue); } /** * 解析模板 * * @param configuration * @param templateName * @throws IOException * @throws TemplateException */ private void processTemplate(Configuration configuration, String templateName, String templateValue) throws IOException, TemplateException { Map<String, Object> root = new HashMap<>(4); root.put("name", "你好"); root.put("age", 25); StringWriter stringWriter = new StringWriter(); Template template = new Template(templateName, templateValue, configuration); template.process(root, stringWriter); System.out.println(stringWriter.toString()); } /** * 配置 freemarker configuration * * @return */ private Configuration configuration() { Configuration configuration = new Configuration(Configuration.VERSION_2_3_27); StringTemplateLoader templateLoader = new StringTemplateLoader(); configuration.setTemplateLoader(templateLoader); configuration.setDefaultEncoding("UTF-8"); return configuration; }
执行结果:
相关推荐
在FreeMarker模板中,可以使用`+`运算符来连接字符串。例如: ```html , "> !"> ${str1 + str2} ``` 这将输出:"Hello, World!" 2. **字符串格式化**: FreeMarker允许使用`printf`指令进行格式化输出,...
根据提供的文件信息,我们可以深入探讨Freemarker中的内置函数,主要关注数字、字符串以及日期的格式化处理。Freemarker是一种强大的模板引擎,被广泛应用于Web开发和其他领域中,用于生成动态HTML页面或其他类型的...
可以使用内建的字符串函数进行进一步格式化,例如:`?string`,`?string.number`,`?string.currency`,`?string.percent`等。 - 日期值:根据默认格式转换为文本,同样可以通过`?string`配合特定格式字符串进行...
在模板文件中,可以使用FreeMarker的`<#assign>`指令将这个字符串赋值给一个变量。 5. **生成Word文档**: 使用FreeMarker的`Template`类加载模板文件,然后用`process`方法将数据模型与模板结合,生成最终的Word...
模板中可以使用FreeMarker语法 `${}` 来引用数据模型中的变量。 步骤三:准备数据模型 定义一个Java对象或Map来存储要展示的数据。例如: ```java Map<String, Object> data = new HashMap(); data.put("title", ...
在给定的实例中,`renderString` 方法演示了如何使用正则表达式和Java的 `Pattern` 和 `Matcher` 类来完成字符串模板的替换。以下是对这个方法的详细解释: 1. 首先,`renderString` 方法接受两个参数:一个包含...
FreeMarker使用FTL标签来定义其专有的语法结构,这有助于区分模板中的逻辑控制部分与普通的HTML标记。具体来说: 1. **开始标签**:<#directivename parameter> 开始标签定义了指令的开始位置,并指定了指令参数。 ...
2. **FreeMarker配置**: 在Java代码中,设置FreeMarker的配置,加载模板文件,并定义数据模型,该模型包含要填充到模板中的数据,比如图片路径。 3. **POI读取模板**: 使用Apache POI的`XWPFDocument`类打开模板文件...
4. **模板测试**: 可以使用FreeMarker提供的API编写单元测试,确保模板的正确性。 总结起来,FreeMarker是一款强大且灵活的模板引擎,它通过分离视图和逻辑,提高了Web开发的效率。理解和熟练运用FreeMarker的语法...
字符串处理是FreeMarker中的一个重要方面,可以进行字符串的拼接、截取、替换等操作。例如: ```ftl ${str?upper_case} <!-- 输出 "HELLO WORLD" --> ${str?replace("o", "0")} <!-- 输出 "Hell0 W0rld" --> ``` ...
Freemarker 常用内置函数 Freemarker 是一个基于 Java 的模板引擎,它提供了一些非常有用的内置函数,可以帮助我们快速开发和...在 Freemarker 模板中,我们可以使用这些内置函数来实现各种复杂的逻辑操作和数据处理。
string`:将对象转换为字符串,即使对象为null也会返回空字符串。 3. `?length`:获取列表或字符串的长度。 4. `?exists`:检查变量是否存在,返回true或false。 四、Freemarker与Java的交互 1. `ModelAndView`:在...
首先,你需要从`Configuration`对象中获取模板,然后用它和数据模型一起生成字符串输出: ```java Template template = cfg.getTemplate("template.ftl"); Map<String, Object> model = new HashMap(); model.put(...
在实际应用中,我们可以根据配置获取到Freemarker的`Template`对象,然后处理模型数据并生成字符串,例如: ```java // 使用FreeMarkerConfigurer Template t = freeMarkerConfigurer.getConfiguration()....
string`将非字符串转换为字符串,`?length`获取数组或集合的长度等。 5. **模板配置**:通过`freemarker.properties`配置文件,可以设置模板解析的全局行为,如模板的编码、错误处理模式、日期时间格式等。 6. **...
例如,`context.put("title", "A Single FreeMarker Example")`将一个键值对放入上下文,其中"message"对应着字符串"A Single FreeMarker Example"。 接下来,我们创建了一个`Configuration`对象,这是Freemarker的...
3. **转换为字符串**:为了发送或保存,我们需要将`Document`对象转换为字符串,这通常通过`TransformerFactory`和`Transformer`实现。 ```java TransformerFactory transformerFactory = TransformerFactory.new...
在模板中,动态数据通过`${}`或`#if`、`#foreach`等控制结构来插入或处理。 3. **配置Freemarker** 在Java项目中,首先需要创建一个`freemarker.config.Configuration`对象,并设置模板目录。在这个实例中,由于...
Freemarker支持简单的表达式运算,可以直接在模板中使用。 - **使用模型中的数据**:`${title}`,这里`title`是从前端传递过来的模型数据的一部分。 这使得Freemarker能够更加动态地处理数据。 #### 六、直接指定...