jetbrick-template-1.x 旧版文档请看这里:http://subchen.github.io/jetbrick-template/1x/

§扩展函数 Functions

jetbrick-template 允许将 javapublic static 的方法变成一个全局函数来使用,我们称之为扩展函数 Functions

比如:

§1. 定义扩展函数

语法:

public static Object function_name ( args ... )

示例:

package jetbrick.demo;

public class MyFunctions {

    public static String today(String format) {
        return new SimpleDateFormat(format).format(new Date());
    }
}

§2. 注册扩展函数

用户自定义的扩展函数必须注册到 JetEngine 中才能使用。注册函数有 3 种途径:

§3. 在模板中使用扩展函数

模板:

${today("yyyy-MM-dd")}

输出结果:

2014-10-02

§4. 在扩展方法中获取 InterpretContext 上下文

要获取 InterpretContext 对象,可以通过 InterpretContext.current() 方法获取当前 Thread local context 关联的 InterpretContext 对象。

@JetAnnotations.Functions
public class MyFunctions {

    public static String hello() {
        InterpretContext ctx = InterpretContext.current();
        HttpSession session = (HttpSession) ctx.getValueStack().getValue(JetWebContext.SESSION);
        return "Hello: " + session.getAttribute("username");
    }
}

模板范例:

${hello()}

模板输出:

Hello: jetbrick

§5. 模板已经内置的扩展函数 Buildin Functions

所有扩展函数都定义在 jetbrick.template.runtime.buildin.JetFunctions

§5.1 常用函数

§5.2 循环计数生成器

生成一个用于循环的数组,主要用于 #for 的循环迭代。

模板范例:

#for (int i : range(1,100))
    ${i}
#end

§5.3 读取纯文本文件内容

§5.4 读取子模板,并获取输出

嵌入一个子模板。和 #include 指令的区别,此函数对子模板的输出进行了缓存,可以处理返回的内容,但是效率没有 #include 指令高。

§5.5 调用一个 servlet/action,并获取输出

嵌入一个子页面,这个页面直接对应一个 servlet 或者 action URL,需要引入 jetbrick-template-web。

§5.6 调用一个 macro,并获取输出

§5.7 调试专用函数 debug(...)