Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
             Template template = getTemplate(ftlName, ftlPath);
             template.process(root, out);
     public static Template getTemplate(String ftlName, String ftlPath) throws Exception{
         try {
             Configuration cfg = new Configuration();                                                  //通过Freemaker的Configuration读取相应的ftl
             cfg.setEncoding(Locale.CHINA, "utf-8");
             cfg.setDirectoryForTemplateLoading(new File(PathUtil.getClassResources()+"/ftl/"+ftlPath));        //设定去哪里读取相应的ftl模板文件
             Template temp = cfg.getTemplate(ftlName);                                                //在模板文件目录中找到名称为name的文件
             return temp;
         } catch (IOException e) {
             e.printStackTrace();
         }
         return null;
     }
template 就是获取的模板
 package com.fh.controller.${packageName}.${objectNameLower};

 import java.io.PrintWriter;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Resource;
 import org.springframework.beans.propertyeditors.CustomDateEditor;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.WebDataBinder;
 import org.springframework.web.bind.annotation.InitBinder;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 import com.fh.controller.base.BaseController;
 import com.fh.entity.Page;
 import com.fh.util.AppUtil;
 import com.fh.util.ObjectExcelView;
 import com.fh.util.PageData;
 import com.fh.util.Jurisdiction;
 import com.fh.util.Tools;
 import com.fh.service.${packageName}.${objectNameLower}.${objectName}Manager;

 /**
  * 说明:${TITLE}
  * 创建人:FH Q313596790
  * 创建时间:${nowDate?string("yyyy-MM-dd")}
  */
 @Controller
 @RequestMapping(value="/${objectNameLower}")
 public class ${objectName}Controller extends BaseController {

     String menuUrl = "${objectNameLower}/list.do"; //菜单地址(权限用)
     @Resource(name="${objectNameLower}Service")
     private ${objectName}Manager ${objectNameLower}Service;

     /**保存
      * @param
      * @throws Exception
      */
     @RequestMapping(value="/save")
     public ModelAndView save() throws Exception{
         logBefore(logger, Jurisdiction.getUsername()+"新增${objectName}");
         if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;} //校验权限
         ModelAndView mv = this.getModelAndView();
         PageData pd = new PageData();
         pd = this.getPageData();
         pd.put("${objectNameUpper}_ID", this.get32UUID());    //主键
 <#list fieldList as var><#if var[3] == "否"><#if var[1] == "Date">        pd.put("${var[0]}", Tools.date2Str(new Date()));    //${var[2]}
 <#elseif var[1] == "Integer">        pd.put("${var[0]}", "${var[4]?replace("无",0)}");    //${var[2]}
 <#elseif var[1] == "Double">        pd.put("${var[0]}", "${var[4]?replace("无",0)}");    //${var[2]}
 <#else>        pd.put("${var[0]}", "${var[4]?replace("无","")}");    //${var[2]}
 </#if></#if></#list>        ${objectNameLower}Service.save(pd);
         mv.addObject("msg","success");
         mv.setViewName("save_result");
         return mv;
     }

     /**删除
      * @param out
      * @throws Exception
      */
     @RequestMapping(value="/delete")
     public void delete(PrintWriter out) throws Exception{
         logBefore(logger, Jurisdiction.getUsername()+"删除${objectName}");
         if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return;} //校验权限
         PageData pd = new PageData();
         pd = this.getPageData();
         ${objectNameLower}Service.delete(pd);
         out.write("success");
         out.close();
     }

     /**修改
      * @param
      * @throws Exception
      */
     @RequestMapping(value="/edit")
     public ModelAndView edit() throws Exception{
         logBefore(logger, Jurisdiction.getUsername()+"修改${objectName}");
         if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
         ModelAndView mv = this.getModelAndView();
         PageData pd = new PageData();
         pd = this.getPageData();
         ${objectNameLower}Service.edit(pd);
         mv.addObject("msg","success");
         mv.setViewName("save_result");
         return mv;
     }

     /**列表
      * @param page
      * @throws Exception
      */
     @RequestMapping(value="/list")
     public ModelAndView list(Page page) throws Exception{
         logBefore(logger, Jurisdiction.getUsername()+"列表${objectName}");
         //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
         ModelAndView mv = this.getModelAndView();
         PageData pd = new PageData();
         pd = this.getPageData();
         String keywords = pd.getString("keywords");                //关键词检索条件
         if(null != keywords && !"".equals(keywords)){
             pd.put("keywords", keywords.trim());
         }
         page.setPd(pd);
         List<PageData>    varList = ${objectNameLower}Service.list(page);    //列出${objectName}列表
         mv.setViewName("${packageName}/${objectNameLower}/${objectNameLower}_list");
         mv.addObject("varList", varList);
         mv.addObject("pd", pd);
         mv.addObject("QX",Jurisdiction.getHC());    //按钮权限
         return mv;
     }

     /**去新增页面
      * @param
      * @throws Exception
      */
     @RequestMapping(value="/goAdd")
     public ModelAndView goAdd()throws Exception{
         ModelAndView mv = this.getModelAndView();
         PageData pd = new PageData();
         pd = this.getPageData();
         mv.setViewName("${packageName}/${objectNameLower}/${objectNameLower}_edit");
         mv.addObject("msg", "save");
         mv.addObject("pd", pd);
         return mv;
     }    

      /**去修改页面
      * @param
      * @throws Exception
      */
     @RequestMapping(value="/goEdit")
     public ModelAndView goEdit()throws Exception{
         ModelAndView mv = this.getModelAndView();
         PageData pd = new PageData();
         pd = this.getPageData();
         pd = ${objectNameLower}Service.findById(pd);    //根据ID读取
         mv.setViewName("${packageName}/${objectNameLower}/${objectNameLower}_edit");
         mv.addObject("msg", "edit");
         mv.addObject("pd", pd);
         return mv;
     }    

      /**批量删除
      * @param
      * @throws Exception
      */
     @RequestMapping(value="/deleteAll")
     @ResponseBody
     public Object deleteAll() throws Exception{
         logBefore(logger, Jurisdiction.getUsername()+"批量删除${objectName}");
         if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return null;} //校验权限
         PageData pd = new PageData();
         Map<String,Object> map = new HashMap<String,Object>();
         pd = this.getPageData();
         List<PageData> pdList = new ArrayList<PageData>();
         String DATA_IDS = pd.getString("DATA_IDS");
         if(null != DATA_IDS && !"".equals(DATA_IDS)){
             String ArrayDATA_IDS[] = DATA_IDS.split(",");
             ${objectNameLower}Service.deleteAll(ArrayDATA_IDS);
             pd.put("msg", "ok");
         }else{
             pd.put("msg", "no");
         }
         pdList.add(pd);
         map.put("list", pdList);
         return AppUtil.returnObject(pd, map);
     }

      /**导出到excel
      * @param
      * @throws Exception
      */
     @RequestMapping(value="/excel")
     public ModelAndView exportExcel() throws Exception{
         logBefore(logger, Jurisdiction.getUsername()+"导出${objectName}到excel");
         if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;}
         ModelAndView mv = new ModelAndView();
         PageData pd = new PageData();
         pd = this.getPageData();
         Map<String,Object> dataMap = new HashMap<String,Object>();
         List<String> titles = new ArrayList<String>();
 <#list fieldList as var>        titles.add("${var[2]}");    //${var_index + 1}
 </#list>        dataMap.put("titles", titles);
         List<PageData> varOList = ${objectNameLower}Service.listAll(pd);
         List<PageData> varList = new ArrayList<PageData>();
         for(int i=0;i<varOList.size();i++){
             PageData vpd = new PageData();
 <#list fieldList as var><#if var[1] == "Integer">            vpd.put("var${var_index + 1}", varOList.get(i).get("${var[0]}").toString());    //${var_index + 1}
 <#elseif var[1] == "Double">            vpd.put("var${var_index + 1}", varOList.get(i).get("${var[0]}").toString());    //${var_index + 1}
 <#else>            vpd.put("var${var_index + 1}", varOList.get(i).getString("${var[0]}"));        //${var_index + 1}
 </#if></#list>            varList.add(vpd);
         }
         dataMap.put("varList", varList);
         ObjectExcelView erv = new ObjectExcelView();
         mv = new ModelAndView(erv,dataMap);
         return mv;
     }

     @InitBinder
     public void initBinder(WebDataBinder binder){
         DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
     }
 }

 null
 null
 {}
 null

root的值

{faobject=, packageName=system, fieldList=[[Ljava.lang.String;@55fbf1af, [Ljava.lang.String;@fb84443, [Ljava.lang.String;@a8992c5, [Ljava.lang.String;@4e02c8ea, [Ljava.lang.String;@18d4a2a9, [Ljava.lang.String;@300311fb], objectName=UserPhoto, nowDate=Fri Feb 09 21:25:26 CST 2018, tabletop=SYS_, objectNameUpper=USERPHOTO, objectNameLower=userphoto, TITLE=用户头像}

只不过这时候获取的模板是动态的,这时候通过

template.process(root, out);

这个方法中root 是动态的这时候root就会动态的把tempate获取的动态数据给替换掉

template.process(root, out)的用法(shiro项目中来的九)的更多相关文章

  1. 权限的分类(shiro项目中来的五)

    第一种权限:菜单栏展示还是不展示的权限(粗颗粒) 实现方法,在SYS_ROLE表中添加一个字段rights,通过 public static BigInteger sumRights(String[] ...

  2. setBit testBit权限管理(shiro项目中来的二)

    一,setBit testBit权限管理的理解 1.1.jdk7文档解释 public boolean testBit(int n)Returns true if and only if the de ...

  3. shiro的登陆认证(shiro项目中来的一)

    一,图解 二,流程 2.1,创建token令牌,token中有用户提交的认证信息即账号和密码 Subject subject = SecurityUtils.getSubject(); Usernam ...

  4. java自带的类压缩和下载,以及递归删除动态的文件(shiro项目中来的十)

    详见项目,不用借助于任何外在的jar包,通过jre自带的实现.

  5. 非空校验的提示按钮(shiro项目中来的六)

    一:图示 二,js脚本 /** * jquery tips 提示插件 jquery.tips.js v0.1beta * * 使用方法 * $(selector).tips({ //selector ...

  6. springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、

    要实现的目的:根据登录用户.查询出当前用户具有的所有权限.然后登录系统后.根据查询到的权限信息进行不同的操作. 以下的代码是在搭好的框架之下进行的编码. 文章目录 核心实现部分. 第一种是将用户表和角 ...

  7. String.valueOf(Thread.currentThread().getContextClassLoader().getResource("")) 获取项目的绝对路径(shiro项目中来的八)

    一,上代码 String.valueOf(Thread.currentThread().getContextClassLoader().getResource("")) file: ...

  8. 动态添加弹出页面(shiro项目中来的七)

    一,图解 二,代码 2.0,新增代码 //打开编辑属性(新增) function dialog_open(){ $("#dialog-add").css("display ...

  9. 页面某些特定图标的权限,比如导入导出表格,下载等等,这个权限必须在有某个页面查看的权利的基础上(细粒度)(shiro项目中来的四)

    一,查找按钮权限的设置 第一步:会根据用户的相关信息去查到它的角色表: SELECT * FROM SYS_USER WHERE user_id='eded77bdf35347249b2bacfa18 ...

随机推荐

  1. 洛谷 [P3355] 骑士共存问题

    二分图求最大独立点集 本问题在二分图中已处理过,此处用dinic写了一遍 #include <iostream> #include <cstdio> #include < ...

  2. bzoj 3509: [CodeChef] COUNTARI] [分块 生成函数]

    3509: [CodeChef] COUNTARI 题意:统计满足\(i<j<k, 2*a[j] = a[i] + a[k]\)的个数 \(2*a[j]\)不太好处理,暴力fft不如直接暴 ...

  3. CF698C. LRU [容斥原理 概率]

    CF698C. LRU 题意:n种物品,大小为k的队列,\(p_i\)的概率选择第i种物品放入队尾,如果已经有i了就不放了.队列大小>k时弹出队首.求\(10^{100}\)次操作后每种物品在队 ...

  4. 基本的socket编程的介绍

    网络IPC:套接字 用socket实现两个不同的主机之间的通信(涉及到一些基本的计算机网络知识  略过..) 服务器端: 1.socket函数:生成一个套接字 int socket(int domai ...

  5. 《Web Scraping With Python》Chapter 1的学习笔记

    urllib urllib是python library自带的库,可以直接用. urlopen from urllib.request import urlopen html = urlopen(&q ...

  6. open-falcon-agent插件使用

    说明 Plugin可以看做是对agent功能的扩充.使用插件可以对采集脚本进行统一管理,方便定制修改,也可以免去在crontab中添加计划任务. 开启plugin功能 # 修改agent配置文件 &q ...

  7. 使用performance进行网页性能监控

    由于项目需要, 需要对网页的一些性能进行监控, 接触到了performance, window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据, 将这些数据存储为 ...

  8. Node.js爬取豆瓣数据

    一直自以为自己vue还可以,一直自以为webpack还可以,今天在慕课逛node的时候,才发现,自己还差的很远.众所周知,vue-cli基于webpack,而webpack基于node,对node不了 ...

  9. 打通MySQL的操作权限

    打通MySQL的操作权限 前面已经总结了<XAMPP的配置与使用>,虽然可以直接通过GUI控制面板去启动MySQL服务,但是有些相关的操作则需要在Windows中的CMD命令窗口中去对My ...

  10. [Uva10294]Arif in Dhaka

    [Uva10294]Arif in Dhaka 标签: 置换 Burnside引理 题目链接 题意 有很多个珠子穿成环形首饰,手镯可以翻转和旋转,项链只能旋转.(翻转过的手镯相同,而项链不同) 有n个 ...