<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    不做浮躁的人
    正在行走的人...
    posts - 171,  comments - 51,  trackbacks - 0

    1、配置對象:
    Configuration cfg = new Configuration();
    cfg.setDirectoryForTemplateLoading(new File("/where/you/store/templates"));
    cfg.setObjectWrapper(new DefaultObjectWrapper());?


    2:得到模板對象:
    Template temp = cfg.getTemplate("test.ftl");?
    Configuration對Template對象進行緩存。

    3:合并模板和數據模型:
    Writer out = new OutputStreamWriter(System.out);
    temp.process(root, out);
    out.flush();?


    4:數據模型:
    ??????任何模板要使用的數據模型都是通過object wrapping將傳入的對象包裝成實現TemplateModel接口的對象。
    ??????TemplateModel提供幾個下級接口:TemplateSequenceModel等。

    5:單值模型:Scalars???
    ??????Boolean?
    ??????Number?
    ??????String?
    ??????Date

    ? Template Type Model
    6:方法????
    public class IndexOfMethod implements TemplateMethodModel {
    ???
    ??? public TemplateModel exec(List args) throws TemplateModelException {
    ??????? if (args.size() != 2) {
    ??????????? throw new TemplateModelException("Wrong arguments");
    ??????? }
    ??????? return new SimpleNumber(
    ??????????? ((String) args.get(1)).indexOf((String) args.get(0)));
    ??? }
    }?

    root.put("indexOf", new IndexOfMethod());?

    <#assign x = "something">
    ${indexOf("met", x)}
    ${indexOf("foo", x)}?

    7:Transforms
    ???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() {
    ??????? }
    ??? }
    }

    root.put("upperCase", new UpperCaseTransform());

    <@upperCase>
    blah2
    blah3
    </@upperCase>

    8:訪問freemarker的環境變量:Environment.getCurrentEnvironment().?

    9:共享變量是指所有模板都能訪問的變量,在configuration中設置。
    ??????cfg.setSharedVariable("to_upper", new UpperCaseTransform());
    ??????cfg.setSharedVariable("company", "Foo Inc.");??????

    ??????數據模型中的變量將會隱藏同名的共享變量。

    ??????TemplateModel的實現不是線層安全的,因此不能用于共享變量。

    ??????預置共享變量:
    ??????

    name

    class

    capture_output

    freemarker.template.utility.CaptureOutput

    compress

    freemarker.template.utility.StandardCompress

    html_escape

    freemarker.template.utility.HtmlEscape

    normalize_newlines

    freemarker.template.utility.NormalizeNewlines

    xml_escape

    freemarker.template.utility.XmlEscape

    ?
    10:設置層次:configuration, template, runtime environment

    ????
    posted on 2007-03-25 21:38 不做浮躁的人 閱讀(1127) 評論(0)  編輯  收藏 所屬分類: freemarker

    <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(9)

    隨筆分類(31)

    隨筆檔案(75)

    文章分類(1)

    文章檔案(3)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 91麻豆国产自产在线观看亚洲| 久久一本岛在免费线观看2020| 亚洲w码欧洲s码免费| 亚洲av永久无码精品国产精品| 一级日本高清视频免费观看| 国产一级淫片a视频免费观看| 亚洲AV日韩AV一区二区三曲 | 亚洲成AV人片一区二区密柚| 视频一区二区三区免费观看| 亚洲中文无码mv| 无人影院手机版在线观看免费| 亚洲人成毛片线播放| 97视频热人人精品免费| 亚洲xxxx18| 日韩中文无码有码免费视频 | 亚洲精品成人无限看| 国产色爽免费无码视频| 亚洲国产精品无码AAA片| 久久99毛片免费观看不卡| 久久精品国产亚洲av麻豆色欲 | 一级午夜a毛片免费视频| 中文字幕亚洲天堂| 免费国产午夜高清在线视频 | 久久久久一级精品亚洲国产成人综合AV区 | 1000部夫妻午夜免费 | 亚洲av无码片区一区二区三区| 好吊妞788免费视频播放 | 在线观看片免费人成视频无码| 久久丫精品国产亚洲av| 青草草色A免费观看在线| 国产精品亚洲色图| 亚洲精品国产成人片| 91精品国产免费久久久久久青草| 亚洲欧美成人综合久久久| 亚洲一级特黄大片无码毛片| 久久久久免费看黄a级试看| 亚洲人成网站免费播放| 亚洲中文字幕无码久久综合网| 曰批全过程免费视频网址| 国产偷国产偷亚洲高清在线| 久久久久久亚洲av成人无码国产|