具体到和webwork整合,因为本身webwork提供了整合servlet,如果要增加全局共享变量,可以通过修改com.opensymphony.webwork.views.freemarker.FreemarkerServlet来实现,我们可以在这个servlet初始化的时候来初始化全局共享变量 与webwork整合配置 配置web.xml
E高级方法 自定义方法
${timer(\
${timer(\
在模板中除了可以通过对象来调用方法外(${object.methed(args)})也可以直接调用java实现的方法,java类必须实现接口TemplateMethodModel的方法exec(List args). 下面以把毫秒的时间转换成按格式输出的时间为例子
public class LongToDate implements TemplateMethodModel {
public TemplateModel exec(List args) throws TemplateModelException { SimpleDateFormat mydate = new SimpleDateFormat((String) args.get(0))); return mydate.format(new Date(Long.parseLong((String)args.get(1))); } }
将LongToDate对象放入到数据模型中 root.put(\模板里使用 <#assign x = \
输出
2001-10-12 5:21:12 2001-10-12
自定义 Transforms
实现自定义的<@transform>文本或表达式@transform>的功能,允许对中间的最终文本进行解析转换
例子:实现<@upcase>str@upcase> 将str转换成STR 的功能
代码如下: import java.io.*;
import java.util.*; import freemarker.template.TemplateTransformModel; class UpperCaseTransform implements TemplateTransformModel { public Writer getWriter(Writer out, Map args) { return new UpperCaseWriter(out); } private class UpperCaseWriter extends Writer { private Writer out; UpperCaseWriter (Writer out) { this.out = out; } public void write(char[] cbuf, int off, int len) throws IOException { out.write(new String(cbuf, off, len).toUpperCase()); } public void flush() throws IOException { out.flush(); } public void close() { } } } 然后将此对象put到数据模型中
root.put(\
在view(ftl)页面中可以如下方式使用
<@upcase> hello world @upcase>
打印输出: HELLO WORLD
F.Built-ins
${x?upper_case} – 小写变大写 ${test?html} - 转换为HTML编码格式 ${repeat(\– 复制B次A Example: ${test?html}
${test?upper_case?html}
Assuming that test stores the string ``Tom & Jerry'', the output will be: Tom & Jerry TOM & JERRY ---------
${repeat(\
will print: :WhatWhatWhat
1. String内置的JavaScript转换: js_string 用途:用于JavaScript转义,转换',\换行等特殊字符 模板: 输出:
2.内置的默认值处理:default 用途: 用于处理默认值 模本:
User: ${userLogin.name?default(\
${(employee.department.manager.name)?default(\输出:
User: Anonymous
注,可以对整个对象树加上(),再用内置处理器这种方便的做法,偶也是最近刚学会的,以前一直用很傻的方法做.....
3. Sequence内置的计数器: xxx_index 用途:显示序号 模板:
<#list employees as e> ${e_index}. ${e.name} #list> 输出: 1. Readonly 2. Robbin
4. Sequence内置的分段器: chunk 用途:某些比较BT的排版需求 模板:
<#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']> <#list seq?chunk(4) as row>
<#list row as cell>${cell} #list>