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. BZOJ 1426: 收集邮票 [DP 期望 平方]

    传送门 题意: 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮 ...

  2. BZOJ 1593: [Usaco2008 Feb]Hotel 旅馆 [线段树]

    传送门 题意: 操作1:找长为$len$的空区间并填满,没有输出$0$ 操作2:将$[l,r]$之间的区间置空 我真是太弱了这种线段树还写了一个半小时,中间为了查错手动模拟了$30min$线段树操作, ...

  3. 闭包和es6实现循环绑定li输出固定索引值

    首先我们需要一个html结构 <div > <ul> <li>a</li> <li>a</li> <li>a< ...

  4. 安装基于 Linux 发行版的重要事项(流程指引)

    安装基于 Linux 发行版的重要事项(Install important issues based on the Linux distribution. (Process guidance)) 1. ...

  5. Getting the pixel coordinates of text or ticks in matplotlib

    The exact pixel coordinates of title, labels, legends or ticks are important information for the tra ...

  6. 监督学习:随机梯度下降算法(sgd)和批梯度下降算法(bgd)

    线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就 ...

  7. ES6 学习笔记之一 块作用域与let和const

    ---恢复内容开始--- 在学习ES6的块作用域和 let.const 之前,我们先来看看ES5以前的 var 关键字. var 关键字用于定义一个变量,通常我们会将其与变量的赋值合并为一条语句,就像 ...

  8. PLECS_晶闸管调速系统_9w

    3. 直流电机开环调压调速系统模型搭建 (1)电路图 (2)仿真 当 α = pi / 2.7 的时候,直流电机的稳定转速大约保持很低的速度. 随着α的减少,直流电机的速度逐渐增大.当α = pi / ...

  9. Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html 在Android中进程间通信是比较难的一部分,同时又非常 ...

  10. 拥抱.NET Core系列:MemoryCache 缓存过期

    在上一篇"拥抱.NET Core系列:MemoryCache 初识"中我们基本了解了缓存的添加.删除.获取,那么今天我们来看看缓存的过期机制.这里和上篇一样将把"Micr ...