• 网页模板生产器


    package FreeMarker;
    
    import java.io.File;  
    import java.io.FileOutputStream;  
    import java.io.IOException;  
    import java.io.OutputStreamWriter;  
    import java.text.SimpleDateFormat;  
    import java.util.ArrayList;  
    import java.util.Date;  
    import java.util.HashMap;  
    import java.util.List;
    import java.util.Locale;
    import java.util.Map;  
      
    import freemarker.template.Configuration;  
    import freemarker.template.Template;  
    import freemarker.template.TemplateException;  
      
    public class Test {  
      
        /** 
         * @param args 
         */  
        @SuppressWarnings({ "deprecation", "unchecked", "rawtypes" })  
        public static void main(String[] args) {  
            //System.out.println(System.getProperty("user.dir")+"============");  
            Configuration cfg = new Configuration();  
            try {  
                cfg.setClassForTemplateLoading(Test.class, "/FreeMarker");//指定模板所在的classpath目录
                cfg.setEncoding(Locale.CHINA, "gbk");
                cfg.setSharedVariable("upperFC", new UpperFirstCharacter());//添加一个"宏"共享变量用来将属性名首字母大写  
                Template t = cfg.getTemplate("javabean.html");//指定模板  
                cfg.setSharedVariable("upperFC", new UpperFirstCharacter());//添加一个"宏"共享变量用来将属性名首字母大写    
                FileOutputStream fos = new FileOutputStream(new File("Item.java"));//java文件的生成目录  
      
                //模拟数据源  
                Map data = new HashMap();  
                data.put("basepackage", "com.ook");//包名  
                data.put("collection", "item");  
                data.put("entity", "Item");  
                data.put("entityDes", "商品entity");  
                SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");  
                data.put("entityCt", df.format(new Date()));  
      
                List propertyList = new ArrayList();  
                Map proMap = new HashMap();  
                proMap.put("proType", String.class.getSimpleName());  
                proMap.put("proName", "name");  
                proMap.put("des", "");  
                propertyList.add(proMap);  
      
                proMap = new HashMap();  
                proMap.put("proType", Date.class.getSimpleName());  
                proMap.put("proName", "ct");  
                proMap.put("des", "//添加时间");  
                propertyList.add(proMap);  
                  
                proMap = new HashMap();  
                proMap.put("proType", int.class.getSimpleName());  
                proMap.put("proName", "hotCnt");  
                proMap.put("des", "//阅读量");  
                propertyList.add(proMap);  
      
                data.put("properties", propertyList);  
                t.process(data, new OutputStreamWriter(fos,"utf-8"));//  
                fos.flush();  
                fos.close();  
                  
                  
                System.out.println("文件生成完毕~");  
            } catch (IOException e) {  
                e.printStackTrace();  
            } catch (TemplateException e) {  
                e.printStackTrace();  
            }  
        }  
      
    }  
    package FreeMarker;
    import java.io.IOException;  
    import java.io.Writer;  
    import java.util.Map;  
    import freemarker.core.Environment;  
    import freemarker.template.TemplateDirectiveBody;  
    import freemarker.template.TemplateDirectiveModel;  
    import freemarker.template.TemplateException;  
    import freemarker.template.TemplateModel;  
    import freemarker.template.TemplateModelException;  
      
    public class UpperFirstCharacter implements TemplateDirectiveModel{    
      
        @SuppressWarnings("rawtypes")  
        public   void  execute(Environment env,    
                Map params, TemplateModel[] loopVars,    
                TemplateDirectiveBody body)    
                        throws  TemplateException, IOException {    
            // Check if no parameters were given:     
            if  (!params.isEmpty()) {    
                throw   new  TemplateModelException(    
                        "This directive doesn't allow parameters." );    
            }    
            if  (loopVars.length !=  0 ) {    
                throw   new  TemplateModelException(    
                        "This directive doesn't allow loop variables." );    
            }    
      
            // If there is non-empty nested content:     
            if  (body !=  null ) {    
                // Executes the nested body. Same as <#nested> in FTL, except     
                // that we use our own writer instead of the current output writer.     
                body.render(new  UpperCaseFilterWriter(env.getOut()));    
            } else  {    
                throw   new  RuntimeException( "missing body" );    
            }    
        }    
      
        /**    
         * A {@link Writer} that transforms the character stream to upper case    
         * and forwards it to another {@link Writer}.    
         */      
        private   static   class  UpperCaseFilterWriter  extends  Writer {    
      
            private   final  Writer out;    
      
            UpperCaseFilterWriter (Writer out) {    
                this .out = out;    
            }    
      
            public   void  write( char [] cbuf,  int  off,  int  len)    
                    throws  IOException {    
                //            char[] transformedCbuf = new char[len];     
                //            for (int i = 0; i < len; i++) {     
                //                transformedCbuf[i] = Character.toUpperCase(cbuf[i + off]);     
                //            }     
                //            out.write(transformedCbuf);     
                cbuf[0 ] = Character.toUpperCase(cbuf[ 0 ]);    
                out.write(String.valueOf(cbuf).trim());///把右边空格去掉     
            }    
      
            public   void  flush()  throws  IOException {    
                out.flush();    
            }    
      
            public   void  close()  throws  IOException {    
                out.close();    
            }    
        }    
      
    }    
    package ${basepackage}.entity;  
      
    import java.util.Date;  
    import java.io.Serializable;  
    import org.springframework.data.annotation.Id;  
    import org.springframework.data.mongodb.core.mapping.Document;  
      
    /**  
     * ${entityDes}  
     * @date ${entityCt}  
     */  
    @Document(collection="${collection}")  
    public class ${entity} implements Serializable{  
        private static final long serialVersionUID = 1L;  
        @Id  
        private String id;  
    <#list properties as pro>  
        private ${pro.proType} ${pro.proName};${pro.des}  
    </#list>  
          
        public String getId() {  
            return id;  
        }  
        public void setId(String id) {  
            this.id = id;  
        }  
    <#list properties as pro>  
        public void set<@upperFC>${pro.proName}</@upperFC>(${pro.proType} ${pro.proName}){  
            this.${pro.proName}=${pro.proName};  
        }  
          
        public ${pro.proType} get<@upperFC>${pro.proName}</@upperFC>(){  
            return this.${pro.proName};  
        }  
          
    </#list>  
    } 
  • 相关阅读:
    switch-case的用法
    关于string
    串的顺序存储和链式存储
    【APIO2009T1】采油区域-分类讨论+动态规划
    【APIO2009T1】采油区域-分类讨论+动态规划
    【BashuOJ2963】数字游戏-DFS+剪枝
    【BashuOJ2963】数字游戏-DFS+剪枝
    【POJ3177】Redundant Paths-边双连通分量+缩点
    【POJ3177】Redundant Paths-边双连通分量+缩点
    【POJ2942】Knights of the Round Table-点双连通分量+判断奇环
  • 原文地址:https://www.cnblogs.com/chenxuezhouLearnProgram/p/5712978.html
Copyright © 2020-2023  润新知