Freemarkerは、カスタムラベル(以前の方法の2.3.11バージョン)を達成するために

独自のコンバータを展開する
TemplateTransformModelコンバータインタフェースには、Writer getWriter(Writer out、Map args)というメソッドがあります。 このメソッドはタグの内容を変換し、まずタグの内容をWriterオブジェクトに読み込み、次にWriterオブジェクトを使用して内容を変換し、変換されたコンテンツをWriterに再度格納します。 flushメソッドを呼び出すと、コンテンツが出力されます。 out.close()を呼び出す必要はなく、終了タグに達するとcloseが自動的に呼び出されます。

タグ間での大文字変換の例を次に示します。

  import java.io. *;
 import java.util。*;
インポートfreemarker.template.TemplateTransformModel;

パブリッククラスUpperCaseTransformModelは、TemplateTransformModel {

     public Writer getWriter(Writer out、Map args){
        新しいUpperCaseWriter(out)を返します。
     }

    プライベートクラスUpperCaseWriterはWriter {
        プライベートライター

         UpperCaseWriter(Writer out){
             this.out = out;
         }

         public void write(char [] cbuf、int off、int len)throws IOException {
             out.write(新しい文字列(cbuf、off、len).toUpperCase());
         }

         public void flush()throws IOException {
             out.flush();
         }

         public void close(){
         }
     }
 }
  import java.io.File;
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Map;

 import freemarker.template.Configuration;
 import freemarker.template.DefaultObjectWrapper;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;

 / **
  *
  *テンプレートツール*
パブリッククラスFreeMarkertUtil {
     / **
      * @param templatePathテンプレートファイル格納ディレクトリ* @param templateNameテンプレートファイル名* @paramルートデータモデルルートオブジェクト* @ param templateテンプレートファイルのエンコードエンコーディング* @param出力ストリームから* /
     public static void processTemplate(String templatePath、String templateName、String templateEncoding、Map <?、?> root、Writer out){
        試して{
            コンフィギュレーションconfig = new Configuration();
            ファイルfile =新しいファイル(templatePath);
             / /テンプレートを解析するディレクトリを設定し、テンプレートファイルをロードします。config.setDirectoryForTemplateLoading(file);
             //ラッパーを設定し、オブジェクトをデータモデルとしてラップします。config.setObjectWrapper(new DefaultObjectWrapper());

             //テンプレートを取得し、エンコーディングを設定すると、エンコーディングはページのエンコーディング形式と一致する必要があります。template template = config.getTemplate(templateName、templateEncoding);
             //データモデルをテンプレートtemplate.process(root、out)でマージします。
             out.flush();
             out.close();
         } catch(IOException e){
             e.printStackTrace();
         } catch(TemplateException e){
             e.printStackTrace();
         }

     }
 }
  import java.io.OutputStreamWriter;
 import java.util.HashMap;
 import java.util.Map;

 / **
  *
  *クライアントテストテンプレート入力クラス* /
パブリッククラスClientTest {
     public static void main(String [] args){
         Map <String、Object>ルート=新しいHashMap <String、Object>();
         //root.put("length "、new StringLengthMethod());
         root.put( "upperCase"、新しいUpperCaseTransformModel());
         FreeMarkertUtil.processTemplate( "src / templates"、 "demo01.ftl"、 "UTF-8"、ルート、新しいOutputStreamWriter(System.out));
     }
 } 

テンプレートファイルdemo01.ftlは次のとおりです。

 大文字に変換文字をテストする:
 <@upperCase>
 abcdef
 </ @ upperCase> 
カテゴリ:Default 時間:2018-05-15 人気:1
この記事では、 フリーメーカ、java

関連記事

Copyright (C) socapnw.com, All Rights Reserved.

Socapnw All Rights Reserved.

processed in 0.178 (s). 9 q(s)