<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 不做浮躁的人 閱讀(1125) 評論(0)  編輯  收藏 所屬分類: freemarker

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

    常用鏈接

    留言簿(9)

    隨筆分類(31)

    隨筆檔案(75)

    文章分類(1)

    文章檔案(3)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 本道天堂成在人线av无码免费| 亚洲精品美女视频| 99免费在线视频| 可以免费观看一级毛片黄a| 亚洲欧洲日产国码久在线| 免费可以在线看A∨网站| 色老板亚洲视频免在线观 | 春意影院午夜爽爽爽免费| 亚洲精品国产精品乱码不卞 | 成年男女男精品免费视频网站| 亚洲一卡2卡3卡4卡乱码 在线| 青娱乐免费视频在线观看| 最新亚洲精品国偷自产在线| 韩国日本好看电影免费看| 久久亚洲2019中文字幕| 成av免费大片黄在线观看| 亚洲大尺度无码专区尤物| 看亚洲a级一级毛片| 韩国免费一级成人毛片| 亚洲熟女综合一区二区三区| 国产免费人成视频在线观看| 人人爽人人爽人人片A免费| 亚洲线精品一区二区三区| 美女免费视频一区二区| 中文字幕亚洲激情| 97青青草原国产免费观看| 自拍偷区亚洲国内自拍| 午夜国产大片免费观看| 最近2019中文免费字幕在线观看| 亚洲男女性高爱潮网站| 免费萌白酱国产一区二区| 一级做a毛片免费视频| 亚洲一区中文字幕久久| 午夜私人影院免费体验区| 亚洲阿v天堂在线2017免费| 亚洲综合激情视频| 国产乱人免费视频| 国产精品白浆在线观看免费| 亚洲乱码日产精品一二三| 亚洲熟妇av一区二区三区| 在线观看无码AV网站永久免费|