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

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

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

    posts - 0,  comments - 17,  trackbacks - 0

    FreeMarker概述

    • FreeMarker是一個(gè)模板引擎,一個(gè)基于模板生成文本輸出的通用工具,使用純Java編寫(xiě)
    • Template + data model = output
    • Hello world

    • FreeMarkerTest.java
     
    import java.io.StringWriter;import java.util.HashMap;import java.util.Locale;
     
    import freemarker.template.Configuration;import freemarker.template.Template;
     
    publicclass FreeMarkerTest {
     
    publicstaticvoid main(String[] args){
    FreeMarkerTest test = new FreeMarkerTest();
    test.sayHello("Hermit");
    }
     
    publicvoid sayHello(String name){
    Configuration freemarkerCfg = new Configuration();
    freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/");
     
    freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
    Template template;
    Locale.setDefault(Locale.ENGLISH);
    try{
    template = freemarkerCfg.getTemplate("Hello.ftl");
    template.setEncoding("UTF-8");
    HashMap root = newHashMap();
    root.put("user", name);
     
    StringWriter writer = newStringWriter();
    template.process(root, writer);
    System.out.println(writer.toString());
    }catch(Exception e){
    e.printStackTrace();
    }}
     
     
     
    }
     
    • Hello.ftl
     
     
    Hello ${user}!
     
     
    • 輸出

    Hello Hermit!


    空值的處理

    在我們的程序中難免會(huì)碰到值為空的時(shí)候,如果用一個(gè)空值直接去替換模板中的標(biāo)記,freemarker會(huì)毫不猶豫的拋出異常,并把錯(cuò)誤信息直接寫(xiě)到輸出結(jié)果里。為了對(duì)付這種情況我們有兩種寫(xiě)法

    • 模板
     
    Hello ${user!}!
    Hello ${user?if_exists}
    Hello ${user!'your name'}!
    Hello ${user?default('your name')}
     
    • 程序
     
    test.sayHello(null);
     
    • 輸出
     
    Hello !
    Hello your name!
    Hello
    Hello your name
     

    freemarker國(guó)際化模板

    freemarker支持多語(yǔ)言國(guó)際化,只要把模板名稱按照java資源文件的寫(xiě)法就可以了,也就是name_語(yǔ)言_國(guó)家地區(qū).ftl 如果找不到對(duì)應(yīng)的語(yǔ)言,就會(huì)用默認(rèn)語(yǔ)言的模板。

    • 程序
     
    import java.io.StringWriter;import java.util.HashMap;import java.util.Locale;
     
    import freemarker.template.Configuration;import freemarker.template.Template;
     
    publicclass FreeMarkerTest {
     
    publicstaticvoid main(String[] args){
    FreeMarkerTest test = new FreeMarkerTest();
    test.sayHello("hermit",Locale.CHINA);
    test.sayHello("hermit",Locale.ENGLISH);
    }
     
    publicvoid sayHello(String name,Locale locale){
    Configuration freemarkerCfg = new Configuration();
    freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/");
     
    freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
    Template template;
    Locale.setDefault(Locale.ENGLISH);
    try{
    template = freemarkerCfg.getTemplate("Hello.ftl",locale);
    template.setEncoding("UTF-8");
    HashMap root = newHashMap();
    root.put("user", name);
     
    StringWriter writer = newStringWriter();
    template.process(root, writer);
    System.out.println(writer.toString());
    }catch(Exception e){
    e.printStackTrace();
    }
    }

      
    }
     
    • 默認(rèn)語(yǔ)言模版:Hello.ftl
    Hello ${user!}! 
    中文模版:Hello_zh_CN.ftl
    你好 ${user!}!

    輸出
    你好 hermit!
    Hello hermit!
     

    在struts項(xiàng)目中使用freemarker

    1、引入freemarker.jar
    2、web.xml加入
    	<!-- FreeMarker view servlet (to replace JSP) -->
    <servlet>
    <servlet-name>freemarker</servlet-name><servlet-class>
    freemarker.ext.servlet.FreemarkerServlet
    </servlet-class>
     
    <!-- FreemarkerServlet settings: -->
    <init-param>
    <param-name>TemplatePath</param-name>
    <param-value>
    /</param-value>
    </init-param>
    <init-param>
    <param-name>NoCache</param-name>
    <param-value>true</param-value>
    </init-param>
    <init-param>
    <param-name>ContentType</param-name>
    <param-value>text/html</param-value>
    </init-param>

     
    <!-- FreeMarker settings: --><init-param><param-name>template_update_delay</param-name><param-value>0</param-value>
    <!-- 0 is for development only! Use higher value otherwise. -->

    </init-param>
    <init-param><param-name>default_encoding</param-name>
    <param-value>
    utf-8</param-value></init-param>
    <init-param><param-name>locale</param-name><param-value>en_US</param-value></init-param>
    <init-param>
    <param-name>number_format</param-name><param-value>0.##########</param-value></init-param>
     
    <load-on-startup>1</load-on-startup></servlet>
     
    <servlet-mapping><servlet-name>freemarker</servlet-name><url-pattern>*.ftl</url-pattern></servlet-mapping>
     
    3、一個(gè)示例頁(yè)面
     
    <html><head><title>Say Hello</title><METAHTTP-EQUIV="Content-Type"CONTENT="text/html; charset=utf-8"></head><body><h1>Hello ${user}!</h1></body></html>
     

    我們完全可以用freemarker的模板取代JSP頁(yè)面。用freemarker的模板看起更簡(jiǎn)潔,可讀性更強(qiáng)。比如現(xiàn)在struts2的UI標(biāo)簽就是用freemarker做的。

    freemarker用struts標(biāo)簽做國(guó)際化

    • 示例模板
    <#assign  html =JspTaglibs["/WEB-INF/struts-html.tld"]><#assign  bean =JspTaglibs["/WEB-INF/struts-bean.tld"]><#assign  logic =JspTaglibs["/WEB-INF/struts-logic.tld"]><html><head><title> FreeMarker Struts Example </title><metahttp-equiv ="Content-type"content ="text/html; charset=utf-8"></ head ><body><@bean.message key ="hello"  arg0 ="hermit"/></body></html> 

    主要是引入標(biāo)簽的時(shí)候要這樣寫(xiě):

    <#assign  html =JspTaglibs["/WEB-INF/struts-html.tld"]> 

    freemarker直接使用資源文件進(jìn)行多語(yǔ)言國(guó)際化

    • 程序
    import java.io.StringWriter;import java.util.HashMap;import java.util.Locale;import java.util.ResourceBundle;
     
    import freemarker.ext.beans.BeansWrapper;import freemarker.ext.beans.ResourceBundleModel;import freemarker.template.Configuration;import freemarker.template.Template;
     
    publicclass FreeMarkerTest {
     
    publicstaticvoid main(String[] args){
    FreeMarkerTest test = new FreeMarkerTest();
    test.sayHello("hermit",Locale.CHINA);
    test.sayHello("hermit",Locale.ENGLISH);
    }
     
    publicvoid sayHello(String name,Locale locale){
    Configuration freemarkerCfg = new Configuration();
    freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/");
     
    freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
    Template template;
    Locale.setDefault(Locale.ENGLISH);
    try{
    template = freemarkerCfg.getTemplate("Hello.ftl");
    template.setEncoding("UTF-8");
    HashMap root = newHashMap();
    root.put("user", name);
    ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("ApplicationResources",locale);
    ResourceBundleModel rsbm = new ResourceBundleModel(RESOURCE_BUNDLE,new BeansWrapper());
    root.put("bundle", rsbm);
    StringWriter writer = newStringWriter();
    template.process(root, writer);
    System.out.println(writer.toString());
    }catch(Exception e){
    e.printStackTrace();
    }}
     
     
     
    }

    模板
    ${bundle("hello","hermit")} 

    默認(rèn)語(yǔ)言資源文件
    hello=Hello {0}\! 

    中文資源文件

    hello=你好 {0}\!
    • 輸出
    你好 hermit!
    Hello hermit!

    關(guān)鍵的地方就是用ResourceBundleModel把ResourceBundle轉(zhuǎn)換一下。

    常用的2種加載模板的方式

    • 普通java類根據(jù)當(dāng)前class上下文環(huán)境加載模板
    cfg.setClassForTemplateLoading(this.getClass(), "/");
    • 在web項(xiàng)目中根據(jù)servlet上下文環(huán)境加載模板
    cfg.setServletContextForTemplateLoading(this.getServlet().getServletContext(), "/");
    posted on 2008-05-13 18:40 xyz 閱讀(845) 評(píng)論(0)  編輯  收藏 所屬分類: 網(wǎng)絡(luò)文摘

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿

    隨筆檔案(1)

    文章分類(44)

    文章檔案(46)

    收藏夾(1)

    Adobe

    AOP

    API

    appServer

    BI

    c

    • c-free
    • codeblocks
    • codelite
    • CodeLite IDE 是一個(gè)強(qiáng)大的開(kāi)源,跨平臺(tái)的 C/C++整合開(kāi)發(fā)環(huán)境. 支持包括 Windows、Linux 和 Mac 系統(tǒng)下運(yùn)行
    • codelite官網(wǎng)
    • dev-c++
    • Dev-C++是一個(gè)C&C++開(kāi)發(fā)工具,它是一款自由軟件,遵守GPL協(xié)議。
    • GCC
    • GCC 原名為 GNU C 語(yǔ)言編譯器(GNU C Compiler),因?yàn)樗局荒芴幚?C語(yǔ)言。GCC 很快地?cái)U(kuò)展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語(yǔ)言。

    Cache

    CMS

    DB

    eclipse

    FreeMarker

    hibernate

    html5

    ibatis

    java

    jquery

    js

    json

    Linux

    Log

    mail server

    mobile

    mysql

    oauth

    openID

    other

    PHP

    portal

    report

    Scheduler

    schema

    Security

    SOA

    spring

    struts

    UI原型設(shè)計(jì)

    w3c

    Wap

    webservice

    xml

    供應(yīng)鏈管理

    博客鏈接

    好網(wǎng)站

    工作流

    開(kāi)源網(wǎng)

    招聘

    插件下載

    操作系統(tǒng)

    構(gòu)建可伸縮的系統(tǒng)

    構(gòu)建工具

    測(cè)試

    • IETest
    • IE官網(wǎng)
    • OpenSTA
    • Siege
    • Siege是一個(gè)壓力測(cè)試和評(píng)測(cè)工具,設(shè)計(jì)用于WEB開(kāi)發(fā)這評(píng)估應(yīng)用在壓力下的承受能力

    游戲

    源碼托管

    經(jīng)營(yíng)

    資源

    金融/財(cái)務(wù)

    搜索

    •  

    最新評(píng)論

    主站蜘蛛池模板: 国产精品视频白浆免费视频| 日日麻批免费40分钟日本的| 在线精品一卡乱码免费| 永久黄网站色视频免费| 亚洲欧洲日产国码av系列天堂| 亚洲一区二区三区久久久久| 特级aa**毛片免费观看| 最近中文字幕免费2019| 九月婷婷亚洲综合在线| 亚洲熟妇av一区| 亚欧国产一级在线免费| 免费看污成人午夜网站| 在线观看午夜亚洲一区| 亚洲а∨天堂久久精品9966| 成人爽a毛片免费| 日本免费一区二区三区最新vr| 亚洲av无码专区在线播放| 国产偷国产偷亚洲高清在线| 中国xxxxx高清免费看视频| 亚洲国产免费综合| 亚洲色欲色欲www| 永久免费av无码入口国语片| 国产大片91精品免费看3| 亚洲成无码人在线观看| 男女拍拍拍免费视频网站| 精品国产免费一区二区| 亚洲精品资源在线| 你好老叔电影观看免费| 国产男女猛烈无遮挡免费视频| 亚洲免费观看网站| 久草福利资源网站免费| 亚洲精品无码日韩国产不卡?V| 亚洲熟妇无码AV不卡在线播放| 日韩免费无码视频一区二区三区| 亚洲国产精品丝袜在线观看| 亚洲成在人线在线播放无码| 精品香蕉在线观看免费| 亚洲今日精彩视频| 久久久WWW免费人成精品| 国产91在线免费| 亚洲乱码无人区卡1卡2卡3|