<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是一個模板引擎,一個基于模板生成文本輸出的通用工具,使用純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 2008-05-13 18:40 xyz 閱讀(845) 評論(0)  編輯  收藏 所屬分類: 網絡文摘

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

    留言簿

    隨筆檔案(1)

    文章分類(44)

    文章檔案(46)

    收藏夾(1)

    Adobe

    AOP

    API

    appServer

    BI

    c

    • c-free
    • codeblocks
    • codelite
    • CodeLite IDE 是一個強大的開源,跨平臺的 C/C++整合開發環境. 支持包括 Windows、Linux 和 Mac 系統下運行
    • codelite官網
    • dev-c++
    • Dev-C++是一個C&C++開發工具,它是一款自由軟件,遵守GPL協議。
    • GCC
    • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。

    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原型設計

    w3c

    Wap

    webservice

    xml

    供應鏈管理

    博客鏈接

    好網站

    工作流

    開源網

    招聘

    插件下載

    操作系統

    構建可伸縮的系統

    構建工具

    測試

    • IETest
    • IE官網
    • OpenSTA
    • Siege
    • Siege是一個壓力測試和評測工具,設計用于WEB開發這評估應用在壓力下的承受能力

    游戲

    源碼托管

    經營

    資源

    金融/財務

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 美女被羞羞网站免费下载| 美女扒开屁股让男人桶爽免费 | 国产高潮流白浆喷水免费A片 | 亚洲色最新高清av网站| 亚洲综合久久一本伊伊区| 亚洲日本国产精华液| 亚洲最大免费视频网| 亚洲婷婷在线视频| 亚洲一区二区三区无码国产| 国产成人精品亚洲2020| 亚洲成A人片在线播放器| 亚洲成AV人片在| 久久精品九九亚洲精品天堂| 亚洲大尺度无码专区尤物| 久久夜色精品国产亚洲AV动态图| 亚洲AV区无码字幕中文色| 亚洲精品无码久久毛片波多野吉衣| 亚洲神级电影国语版| 亚洲综合偷自成人网第页色| 亚洲男同gay片| 美女尿口扒开图片免费| 国产精品免费观看视频| 久久狠狠躁免费观看| 99热这里有免费国产精品| 中国在线观看免费高清完整版| 天堂在线免费观看中文版| 精品熟女少妇av免费久久| 97免费人妻无码视频| 国产精品jizz在线观看免费| 中文字幕亚洲综合久久男男| 亚洲精品高清国产一久久| 亚洲香蕉久久一区二区三区四区| 亚洲国产成人综合精品| 一级一级一级毛片免费毛片| 日本亚洲欧美色视频在线播放 | 亚洲日本一区二区| 亚洲国产成人精品无码区在线秒播| 亚洲一区AV无码少妇电影| 国产亚洲精品精品精品| 国产免费无码一区二区| 色窝窝免费一区二区三区 |