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

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

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

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

    FreeMarker概述

    • FreeMarker是一個模板引擎,一個基于模板生成文本輸出的通用工具,使用純Java編寫
    • 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!


    空值的處理

    在我們的程序中難免會碰到值為空的時候,如果用一個空值直接去替換模板中的標記,freemarker會毫不猶豫的拋出異常,并把錯誤信息直接寫到輸出結果里。為了對付這種情況我們有兩種寫法

    • 模板
     
    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國際化模板

    freemarker支持多語言國際化,只要把模板名稱按照java資源文件的寫法就可以了,也就是name_語言_國家地區.ftl 如果找不到對應的語言,就會用默認語言的模板。

    • 程序
     
    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();
    }
    }

      
    }
     
    • 默認語言模版:Hello.ftl
    Hello ${user!}! 
    中文模版:Hello_zh_CN.ftl
    你好 ${user!}!

    輸出
    你好 hermit!
    Hello hermit!
     

    在struts項目中使用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、一個示例頁面
     
    <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頁面。用freemarker的模板看起更簡潔,可讀性更強。比如現在struts2的UI標簽就是用freemarker做的。

    freemarker用struts標簽做國際化

    • 示例模板
    <#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> 

    主要是引入標簽的時候要這樣寫:

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

    freemarker直接使用資源文件進行多語言國際化

    • 程序
    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")} 

    默認語言資源文件
    hello=Hello {0}\! 

    中文資源文件

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

    關鍵的地方就是用ResourceBundleModel把ResourceBundle轉換一下。

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

    • 普通java類根據當前class上下文環境加載模板
    cfg.setClassForTemplateLoading(this.getClass(), "/");
    • 在web項目中根據servlet上下文環境加載模板
    cfg.setServletContextForTemplateLoading(this.getServlet().getServletContext(), "/");
    posted on 2009-01-28 23:17 禮物 閱讀(1761) 評論(0)  編輯  收藏 所屬分類: 模板
    主站蜘蛛池模板: 羞羞漫画小舞被黄漫免费| 日韩免费观看一区| 久久亚洲精品AB无码播放| 亚洲免费网站在线观看| 爱情岛论坛亚洲品质自拍视频网站| 国产成人亚洲综合无码| 日本片免费观看一区二区| 免费人成大片在线观看播放| 亚洲视频在线观看免费| 国产无遮挡裸体免费视频| 99精品视频在线免费观看| 黑人粗长大战亚洲女2021国产精品成人免费视频| 亚洲人成网站在线观看青青| 美女视频黄的全免费视频| 国产在线国偷精品免费看| 亚洲高清视频在线| 亚洲第一视频网站| 亚洲国产成人精品91久久久| 免费AA片少妇人AA片直播| 九九美女网站免费| 免费人成网站永久| 亚洲avav天堂av在线网爱情| 亚洲va久久久噜噜噜久久狠狠| 国产又长又粗又爽免费视频| 在线看片免费人成视久网| 一级一黄在线观看视频免费| 亚洲综合国产成人丁香五月激情| 久久99国产亚洲高清观看首页| 国产国产成年年人免费看片| 免费在线观看视频网站| a毛片免费观看完整| 一级毛片人与动免费观看| 亚洲欧美日韩中文字幕在线一区| 亚洲资源在线观看| 亚洲国产精品一区第二页| 免费成人黄色大片| 日本高清免费网站| 蜜桃视频在线观看免费网址入口| 91青青国产在线观看免费| 国产在线观a免费观看| xvideos永久免费入口|