Freemarker通过字符串变量创建模板

来源:互联网 发布:java 底层实现语言 编辑:程序博客网 时间:2024/05/23 02:21

在应用中,通过模板发邮件的功能,我们可以通过Freemarker来实现。

Freemarker通常是通过模板文件来创建Template对象的,而如果你的模板内容保存在数据库的话,那么,你需要自定义一个Loader来实现通过字符串变量创建模板。

注意,模板里参数的形式是:${user}, 不要漏了美元符号。

示例代码:

  1. /** 
  2.  * Created: 2007-2-1 
  3.  * Modified: 2007-2-1 
  4.  *  
  5.  * Author: Keven Chen 
  6.  */  
  7. package freemarker.loader;  
  8.   
  9. import java.io.IOException;  
  10. import java.io.Reader;  
  11. import java.io.StringReader;  
  12.   
  13. import freemarker.cache.TemplateLoader;  
  14.   
  15. /** 
  16.  * @author Keven Chen 
  17.  * @version $Revision 1.0 $ 
  18.  * 
  19.  */  
  20. public class StringTemplateLoader implements TemplateLoader {  
  21.   
  22.     private String template;  
  23.       
  24.     public StringTemplateLoader(String template){  
  25.         this.template = template;  
  26.         if(template == null){  
  27.             this.template = "";  
  28.         }  
  29.     }  
  30.       
  31.     public void closeTemplateSource(Object templateSource) throws IOException {  
  32.         ((StringReader) templateSource).close();  
  33.     }  
  34.   
  35.     public Object findTemplateSource(String name) throws IOException {  
  36.         return new StringReader(template);  
  37.     }  
  38.   
  39.     public long getLastModified(Object templateSource) {  
  40.         return 0;  
  41.     }  
  42.   
  43.     public Reader getReader(Object templateSource, String encoding)  
  44.             throws IOException {  
  45.         return (Reader) templateSource;  
  46.     }  
  47.   
  48. }  
  49.   
  50. /** 
  51.  * Created: 2007-2-1 
  52.  * Modified: 2007-2-1 
  53.  *  
  54.  * Author: Keven Chen 
  55.  */  
  56. package freemarker;  
  57.   
  58. import java.io.File;  
  59. import java.io.OutputStreamWriter;  
  60. import java.io.StringWriter;  
  61. import java.util.Date;  
  62. import java.util.HashMap;  
  63. import java.util.Map;  
  64.   
  65. import freemarker.loader.ClassPathTemplateLoader;  
  66. import freemarker.loader.StringTemplateLoader;  
  67. import freemarker.template.Configuration;  
  68. import freemarker.template.Template;  
  69.   
  70. /** 
  71.  * @author Keven Chen 
  72.  * @version $Revision 1.0 $ 
  73.  * 
  74.  */  
  75. public class Test {  
  76.   
  77.     public static void main(String[] args) throws Exception {  
  78.         Configuration cfg = new Configuration();  
  79.         cfg.setTemplateLoader(new StringTemplateLoader("欢迎:${user}"));  
  80.         cfg.setDefaultEncoding("UTF-8");  
  81.   
  82.         Template template = cfg.getTemplate("");  
  83.           
  84.         Map root = new HashMap();  
  85.         root.put("user""Keven Chen");  
  86.           
  87.         StringWriter writer = new StringWriter();  
  88.         template.process(root, writer);  
  89.         System.out.println(writer.toString());        
  90.     }  
  91.   
  92. }  


转自:http://www.iteye.com/topic/39939