首先,先创建一个ftl文件:
<div style="width:100%;font-size:12px;">Hello ${name}(${getUserAge(name)})</div>
之后,创建一个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.Locale;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
*
* @Desc 获取FTL文件生成的字符串,以供调用
* @author xujp1
* @version Revision: 1.00 Date: May 9, 2012
*/
public class GenerateStringFromFtl
{
private static Configuration conf = null;
public static void main(String args[])
{
conf = new Configuration();
try
{
conf.setDirectoryForTemplateLoading(new File("WebRoot/WEB-INF/template"));
}
catch (IOException e)
{
e.printStackTrace();
}
conf.setObjectWrapper(new DefaultObjectWrapper());
conf.setLocale(Locale.CHINA);
conf.setSharedVariable("getUserAge", new GetUserAge());//自定义方法供调用
conf.setDefaultEncoding("utf-8");
conf.setClassicCompatible(true);//处理空值为空字符串
String tempReturn = "";
Map<String, Object> root = new HashMap<String, Object>();
String name = "xujp1";
root.put("name", name);
try
{
tempReturn = generateHtmlFromFtl(root, "hellouser.ftl");
}
catch (IOException e)
{
e.printStackTrace();
}
catch (TemplateException e)
{
e.printStackTrace();
}
System.out.println(tempReturn);
}
public static String generateHtmlFromFtl(Object root, String tempPath) throws IOException, TemplateException
{
Template temp = conf.getTemplate(tempPath);
Writer out = new StringWriter(2048);
temp.process(root, out);
return out.toString();
}
}
由于有用到自定义方法,因此在建个方法类:
package freemarker;
import java.util.List;
import freemarker.template.SimpleScalar;
import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateModelException;
/**
*
* @Desc freemarker中使用的方法,根据传入的参数返回相应的值
* @author xujp1
* @version Revision: 1.00 Date: May 9, 2012
*/
public class GetUserAge implements TemplateMethodModel
{
/* (non-Javadoc)
* @see freemarker.template.TemplateMethodModel#exec(java.util.List)
*/
@SuppressWarnings("unchecked")
@Override
public Object exec(List args) throws TemplateModelException
{
if(args.size() != 1)
{
throw new TemplateModelException("Wrong arguments!");
}
int age = 0;
if("xujp1".equalsIgnoreCase((String)args.get(0)))
age = 25;
else
age = 24;
return new SimpleScalar(String.valueOf(age));
}
}
运行后,得到所要的结果
分享到:
相关推荐
`PDFTool`可能包含使用Freemarker的方法,如`processTemplate()`,此方法接受模板文件路径、数据模型和目标PDF输出路径作为参数。`FileController`则可能是处理HTTP请求的控制器,它接收一个HTML URL,并调用`PDF...
- **字符串**: 由单引号或双引号括起来的文本。 - **数字**: 直接使用数值。 - **日期**: 通常从数据模型中获取。 - **布尔值**: `true` 或 `false`,常用于 `<#if...>` 结构中。 **2. Hashes(哈希表)** - ...
length}` 返回字符串的长度。 #### 5. `lower_case` 将字符串转换为小写。 示例:`${STRING?lower_case}` 将字符串`STRING`转换为小写。 #### 6. `upper_case` 将字符串转换为大写。 示例:`${string?upper_case}`...
FreeMarker模板语言(FTL)是模板中使用的标记语言,用于控制结构和逻辑。它与Java代码分离,使得模板设计者可以专注于样式和布局,而开发者则专注于业务逻辑。 二、准备环境 1. 添加依赖:在你的项目中,你需要...
4. **Action返回值**:Action类的execute方法返回一个结果字符串,对应于FreeMarker模板文件的路径。 5. **数据绑定**:在Action类中设置需要传递给视图的数据,这些数据将在FreeMarker模板中被引用。 6. **模板编写...
它可能包含了一个或者多个方法,如`generateWordWithImage()`,这个方法接收模板文件、数据模型和图片,然后返回生成的Word文档。 通过理解以上技术点,你可以构建一个能够动态生成包含图片的Word文档的Java Web...
- 在上面的示例中,`index`方法返回的字符串"index"对应的是Freemarker模板文件的名字,`Model`参数用于向模板传递数据。 5. **Freemarker语法** - Freemarker模板文件(如`index.ftl`)中,可以使用`<#...>`指令...
5. SpringMVC控制器接收到请求后,将数据模型(包括Base64字符串)传递给Freemarker模板。 6. Freemarker根据模板和数据模型生成最终的Word文档。 7. 将生成的Word文档返回给客户端下载或在线预览。 这个项目的实现...
在Freemarker模板语言中,散列(Hashes)是一种非常常见的数据结构,它可以用来存储键值对。这种数据结构非常适合用于需要根据特定键来快速查找或更新值的情况。 ##### 示例: ```plaintext ,"Fred":25}+{"Joe":30...
然后,使用`FreeMarkerViewResolver`作为视图解析器,当控制器返回一个视图名称时,Spring会自动寻找对应的FreeMarker模板文件,并将模型数据传递给FreeMarker进行渲染。 5. **Spring MVC中的FreeMarker应用** 在...
默认情况下,FreeMarker模板文件(`.ftl`)应该放在`src/main/resources/templates`目录下。 接着,创建一个FreeMarker模板文件,例如`index.ftl`,在这个文件中,我们可以定义HTML结构,并使用`${}`符号来插入动态...
方法上有完整的注释,思路是利用模板引擎动态处理模板参数,先生成HTML字符串,放在StringWriter中,再用HTML字符串生成Document,再利用FlyingSaucer的ITextRenderer处理Document,最后输出PDF。 五、实现步骤 1....
2. 在`templates`目录下创建Freemarker模板文件。 3. 创建Controller,返回模板文件名以触发渲染。 4. 在模板文件中使用Freemarker语法处理动态数据。 5. 可选地,自定义Freemarker的配置。 通过这个简单的示例,你...
在这个例子中,`index`方法返回的字符串是模板文件的名称,Spring MVC会自动查找`WEB-INF/views/index.ftl`并用模型数据渲染。 六、Freemarker编辑器的高级功能 1. 自动完成:编辑器通常会提供FTL语法的自动补全,...
2. 数据模型:这是提供给Freemarker模板的数据源,通常由应用程序创建并传递给Freemarker,可以包含各种类型的对象,如字符串、数字、列表、地图等。 3. 模板处理:Freemarker引擎接收模板和数据模型,然后生成最终...
4. **生成HTML**:使用`Template`类加载模板文件,然后用`process`方法将数据模型应用到模板上,生成最终的HTML字符串。 5. **保存或返回HTML**:生成的HTML字符串可以保存为静态文件,或者直接作为HTTP响应返回给...
Spring MVC的视图解析器可以自动将Controller返回的ModelAndView对象转换为FreeMarker模板。此外,还可以通过FreeMarker的自定义指令扩展功能,比如创建宏来复用模板代码。 对于初学者,理解FreeMarker的核心概念和...
- 在Struts2的Action类中,定义方法处理用户请求,返回一个字符串结果,这个结果将与Freemarker模板关联。 - 在`struts.xml`中,为Action类的每个方法配置结果,如`<result name="success">myfreemarker.ftl...
这样,当控制器返回一个逻辑视图名时,FreeMarker会自动寻找对应的模板文件,结合模型数据生成最终的响应。 6. 示例代码: 以下是一个简单的FreeMarker生成HTML的例子: ```java Configuration cfg = new ...