当前位置: 首页 > 编程日记 > 正文

template.process(root, out)的用法(shiro项目中来的九)

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html




1
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8")); 2 Template template = getTemplate(ftlName, ftlPath); 3 template.process(root, out);
 1     public static Template getTemplate(String ftlName, String ftlPath) throws Exception{
 2         try {
 3             Configuration cfg = new Configuration();                                                  //通过Freemaker的Configuration读取相应的ftl
 4             cfg.setEncoding(Locale.CHINA, "utf-8");
 5             cfg.setDirectoryForTemplateLoading(new File(PathUtil.getClassResources()+"/ftl/"+ftlPath));        //设定去哪里读取相应的ftl模板文件
 6             Template temp = cfg.getTemplate(ftlName);                                                //在模板文件目录中找到名称为name的文件
 7             return temp;
 8         } catch (IOException e) {
 9             e.printStackTrace();
10         }
11         return null;
12     }

template 就是获取的模板
  1 package com.fh.controller.${packageName}.${objectNameLower};
  2 
  3 import java.io.PrintWriter;
  4 import java.text.DateFormat;
  5 import java.text.SimpleDateFormat;
  6 import java.util.ArrayList;
  7 import java.util.Date;
  8 import java.util.HashMap;
  9 import java.util.List;
 10 import java.util.Map;
 11 import javax.annotation.Resource;
 12 import org.springframework.beans.propertyeditors.CustomDateEditor;
 13 import org.springframework.stereotype.Controller;
 14 import org.springframework.web.bind.WebDataBinder;
 15 import org.springframework.web.bind.annotation.InitBinder;
 16 import org.springframework.web.bind.annotation.RequestMapping;
 17 import org.springframework.web.bind.annotation.ResponseBody;
 18 import org.springframework.web.servlet.ModelAndView;
 19 import com.fh.controller.base.BaseController;
 20 import com.fh.entity.Page;
 21 import com.fh.util.AppUtil;
 22 import com.fh.util.ObjectExcelView;
 23 import com.fh.util.PageData;
 24 import com.fh.util.Jurisdiction;
 25 import com.fh.util.Tools;
 26 import com.fh.service.${packageName}.${objectNameLower}.${objectName}Manager;
 27 
 28 /** 
 29  * 说明:${TITLE}
 30  * 创建人:FH Q313596790
 31  * 创建时间:${nowDate?string("yyyy-MM-dd")}
 32  */
 33 @Controller
 34 @RequestMapping(value="/${objectNameLower}")
 35 public class ${objectName}Controller extends BaseController {
 36     
 37     String menuUrl = "${objectNameLower}/list.do"; //菜单地址(权限用)
 38     @Resource(name="${objectNameLower}Service")
 39     private ${objectName}Manager ${objectNameLower}Service;
 40     
 41     /**保存
 42      * @param
 43      * @throws Exception
 44      */
 45     @RequestMapping(value="/save")
 46     public ModelAndView save() throws Exception{
 47         logBefore(logger, Jurisdiction.getUsername()+"新增${objectName}");
 48         if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;} //校验权限
 49         ModelAndView mv = this.getModelAndView();
 50         PageData pd = new PageData();
 51         pd = this.getPageData();
 52         pd.put("${objectNameUpper}_ID", this.get32UUID());    //主键
 53 <#list fieldList as var><#if var[3] == "否"><#if var[1] == "Date">        pd.put("${var[0]}", Tools.date2Str(new Date()));    //${var[2]}
 54 <#elseif var[1] == "Integer">        pd.put("${var[0]}", "${var[4]?replace("无",0)}");    //${var[2]}
 55 <#elseif var[1] == "Double">        pd.put("${var[0]}", "${var[4]?replace("无",0)}");    //${var[2]}
 56 <#else>        pd.put("${var[0]}", "${var[4]?replace("无","")}");    //${var[2]}
 57 </#if></#if></#list>        ${objectNameLower}Service.save(pd);
 58         mv.addObject("msg","success");
 59         mv.setViewName("save_result");
 60         return mv;
 61     }
 62     
 63     /**删除
 64      * @param out
 65      * @throws Exception
 66      */
 67     @RequestMapping(value="/delete")
 68     public void delete(PrintWriter out) throws Exception{
 69         logBefore(logger, Jurisdiction.getUsername()+"删除${objectName}");
 70         if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return;} //校验权限
 71         PageData pd = new PageData();
 72         pd = this.getPageData();
 73         ${objectNameLower}Service.delete(pd);
 74         out.write("success");
 75         out.close();
 76     }
 77     
 78     /**修改
 79      * @param
 80      * @throws Exception
 81      */
 82     @RequestMapping(value="/edit")
 83     public ModelAndView edit() throws Exception{
 84         logBefore(logger, Jurisdiction.getUsername()+"修改${objectName}");
 85         if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
 86         ModelAndView mv = this.getModelAndView();
 87         PageData pd = new PageData();
 88         pd = this.getPageData();
 89         ${objectNameLower}Service.edit(pd);
 90         mv.addObject("msg","success");
 91         mv.setViewName("save_result");
 92         return mv;
 93     }
 94     
 95     /**列表
 96      * @param page
 97      * @throws Exception
 98      */
 99     @RequestMapping(value="/list")
100     public ModelAndView list(Page page) throws Exception{
101         logBefore(logger, Jurisdiction.getUsername()+"列表${objectName}");
102         //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
103         ModelAndView mv = this.getModelAndView();
104         PageData pd = new PageData();
105         pd = this.getPageData();
106         String keywords = pd.getString("keywords");                //关键词检索条件
107         if(null != keywords && !"".equals(keywords)){
108             pd.put("keywords", keywords.trim());
109         }
110         page.setPd(pd);
111         List<PageData>    varList = ${objectNameLower}Service.list(page);    //列出${objectName}列表
112         mv.setViewName("${packageName}/${objectNameLower}/${objectNameLower}_list");
113         mv.addObject("varList", varList);
114         mv.addObject("pd", pd);
115         mv.addObject("QX",Jurisdiction.getHC());    //按钮权限
116         return mv;
117     }
118     
119     /**去新增页面
120      * @param
121      * @throws Exception
122      */
123     @RequestMapping(value="/goAdd")
124     public ModelAndView goAdd()throws Exception{
125         ModelAndView mv = this.getModelAndView();
126         PageData pd = new PageData();
127         pd = this.getPageData();
128         mv.setViewName("${packageName}/${objectNameLower}/${objectNameLower}_edit");
129         mv.addObject("msg", "save");
130         mv.addObject("pd", pd);
131         return mv;
132     }    
133     
134      /**去修改页面
135      * @param
136      * @throws Exception
137      */
138     @RequestMapping(value="/goEdit")
139     public ModelAndView goEdit()throws Exception{
140         ModelAndView mv = this.getModelAndView();
141         PageData pd = new PageData();
142         pd = this.getPageData();
143         pd = ${objectNameLower}Service.findById(pd);    //根据ID读取
144         mv.setViewName("${packageName}/${objectNameLower}/${objectNameLower}_edit");
145         mv.addObject("msg", "edit");
146         mv.addObject("pd", pd);
147         return mv;
148     }    
149     
150      /**批量删除
151      * @param
152      * @throws Exception
153      */
154     @RequestMapping(value="/deleteAll")
155     @ResponseBody
156     public Object deleteAll() throws Exception{
157         logBefore(logger, Jurisdiction.getUsername()+"批量删除${objectName}");
158         if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return null;} //校验权限
159         PageData pd = new PageData();        
160         Map<String,Object> map = new HashMap<String,Object>();
161         pd = this.getPageData();
162         List<PageData> pdList = new ArrayList<PageData>();
163         String DATA_IDS = pd.getString("DATA_IDS");
164         if(null != DATA_IDS && !"".equals(DATA_IDS)){
165             String ArrayDATA_IDS[] = DATA_IDS.split(",");
166             ${objectNameLower}Service.deleteAll(ArrayDATA_IDS);
167             pd.put("msg", "ok");
168         }else{
169             pd.put("msg", "no");
170         }
171         pdList.add(pd);
172         map.put("list", pdList);
173         return AppUtil.returnObject(pd, map);
174     }
175     
176      /**导出到excel
177      * @param
178      * @throws Exception
179      */
180     @RequestMapping(value="/excel")
181     public ModelAndView exportExcel() throws Exception{
182         logBefore(logger, Jurisdiction.getUsername()+"导出${objectName}到excel");
183         if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;}
184         ModelAndView mv = new ModelAndView();
185         PageData pd = new PageData();
186         pd = this.getPageData();
187         Map<String,Object> dataMap = new HashMap<String,Object>();
188         List<String> titles = new ArrayList<String>();
189 <#list fieldList as var>        titles.add("${var[2]}");    //${var_index + 1}
190 </#list>        dataMap.put("titles", titles);
191         List<PageData> varOList = ${objectNameLower}Service.listAll(pd);
192         List<PageData> varList = new ArrayList<PageData>();
193         for(int i=0;i<varOList.size();i++){
194             PageData vpd = new PageData();
195 <#list fieldList as var><#if var[1] == "Integer">            vpd.put("var${var_index + 1}", varOList.get(i).get("${var[0]}").toString());    //${var_index + 1}
196 <#elseif var[1] == "Double">            vpd.put("var${var_index + 1}", varOList.get(i).get("${var[0]}").toString());    //${var_index + 1}
197 <#else>            vpd.put("var${var_index + 1}", varOList.get(i).getString("${var[0]}"));        //${var_index + 1}
198 </#if></#list>            varList.add(vpd);
199         }
200         dataMap.put("varList", varList);
201         ObjectExcelView erv = new ObjectExcelView();
202         mv = new ModelAndView(erv,dataMap);
203         return mv;
204     }
205     
206     @InitBinder
207     public void initBinder(WebDataBinder binder){
208         DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
209         binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
210     }
211 }
212 
213 null
214 null
215 {}
216 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获取的动态数据给替换掉

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html

相关文章:

java中最常用jar包的用途说明,适合初学者

jar包用途axis.jarSOAP引擎包commons-discovery-0.2.jar用来发现、查找和实现可插入式接口&#xff0c;提供一些一般类实例化、单件的生命周期管理的常用方法.jaxrpc.jarAxis运行所需要的组件包saaj.jar创建到端点的点到点连接的方法、创建并处理SOAP消息和附件的方法&#xff…

【青少年编程(第33周)】Scratch(三级)公益活动开营了!

2021年10月10日&#xff08;周日&#xff09;晚20:00我们在青少年编程竞赛交流群开展了第三十三期直播活动。我们直播活动的主要内容如下&#xff1a; 首先&#xff0c;我们奖励了上周测试超过40分的小朋友。 其次&#xff0c;我们讲解了上次测试中小朋友们做错的题目Scratch青…

python函数图像绘制、函数不固定_无法在函数中绘制tkinter图像

我正在制作一个垄断游戏&#xff0c;我试图在画布上绘制图像&#xff0c;但它只有在功能不起作用的情况下才会起作用&#xff1a;def make_image(root, location, canvas):photo PhotoImage(file root)canvas.create_image(location["X"],location["Y"],…

一些与算法有关的网站

//转自&#xff1a;http://www.cnblogs.com/a180285/archive/2012/01/15/2290290.html //------------------------------------------------------------------------------------------------------------------------------------------------------------ 我在网上到处找了…

【工程基础】校招研发工程师笔试题

请留言&#xff0c;说出你的解题思路和答案。稍后&#xff0c;我会把参考答案发到留言区。不定期整理相关的问题答案分享。 1、以下代码违反了什么设计原则&#xff08;&#xff09; public class Student {public int Id;public string StudentName; }public class MClass {…

情人节学写html5微信游戏

情人节都在干什么&#xff1f;&#xff1f;&#xff1f; 当然是写代码&#xff01;&#xff01;&#xff01; 看某书正好以一个html5微信游戏&#xff0c;很适合今天的日子 附上demo&#xff1a;demo 请在手机上查看&#xff0c;pc端请切换手机调试模式&#xff0c;目前没弄完后…

python和idl_有前辈对比过IDL和Python的速度吗,哪个会快点?

看到这个问题&#xff0c;发现国外还真有人做过对比&#xff0c;主要在于语言特点方面&#xff0c;并没有详细的定量对比&#xff0c;贴过来大家一起乐呵乐呵。其实大体上就是之前几位答主所说的那样&#xff0c;主要区别在于&#xff1a;1.资料的多少。python资料较多2.现成的…

测试用例经验谈

1.需要测试的那个类是new出来的实例&#xff1b; 2.被测试的类实例的对象所需要调用的接口或者对象都是mock出来的&#xff08;无论是否已经有实现&#xff09;。 3.所有的接口都是根据被测试的类的需要产生的&#xff0c;即接口属于客户&#xff08;被测试的类&#xff09;。 …

中国电子学会图形化四级编程题:加减法混合运算器

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

Bzoj4566:[HAOI2016]找相同字符

题面 Bzoj Sol 两个串拼在一起后求出后缀数组 然后显然的\(n^2\)暴力&#xff0c;就是直接枚举求\(LCP\) 又由于扫的时候是对\(height\)取\(min\) 那么可以用单调栈维护每一段的贡献相同的 # include <bits/stdc.h> # define RG register # define IL inline # define Fi…

python字符照片_python图片转字符图片

python图片转字符图片代码话不多说&#xff0c;直接上代码。***************************#-*- coding:utf-8 -*-from PIL import ImageIMG#文件路径WIDTH60HEIGHT45ascii_char list("$B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~<>i!lI;:,\"^…

三大基本排序专题

//以下依次是冒泡、选择、插入排序 var n,i:longint;a:array[0..20] of longint;procedure BUB;var i,j,t:longint;beginfor i:1 to n-1 dofor j:1 to n-i doif a[j]>a[j1] then begin t:a[j]; a[j]:a[j1]; a[j1]:t; end;end;procedure SEL;var i,j,k,t:longint;beginfor i:…

Linux内核中锁机制之完成量、互斥量

在上一篇博文中笔者分析了关于信号量、读写信号量的使用及源码实现&#xff0c;接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题。 八、完成量 下面讨论完成量的内容&#xff0c;首先需明确完成量表示为一个执行单元需要等待另一个执行单元完成某事后方可执行&…

中国电子学会图形化四级编程题:绳子算法

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

域名登陆出现400_域名解析错误怎么办?

可能有些人在进行域名解析时会遇到解析错误的问题&#xff0c;遇到这样的问题该怎么办呢&#xff1f;今天小编给大家整理了一些思路&#xff0c;希望能够提供一些帮助给大家。网站域名设置目前域名解析服务很多都是由域名供应商来设置&#xff0c;也有用户在网站运营期间需要更…

第02章 PyTorch基础知识

文章目录第02章 Pytorch基础知识2.1 张量2.2 自动求导2.3 并行计算简介2.3.1 为什么要做并行计算2.3.2 CUDA是个啥2.3.3 做并行的方法补充&#xff1a;通过股票数据感受张量概念。本图文是Datawhale组队学习Pytorch的学习笔记&#xff0c;主要内容包括张量的概念&#xff08;0维…

一个简单的缓冲区溢出的思考

从大二开始真正接触技术开始&#xff0c;从最早的HTML&#xff0c;PHP&#xff0c;WEB开发。一直以为以后可能会从事开发的工作&#xff0c;碰巧大三上的时候和同专业的郭子&#xff0c;邹豪参加了南京的一个信息安全技能大赛&#xff0c;才真正找到了兴趣的方向&#xff0c;也…

Spring-boot+Vue = Fame 写blog的一次小结

前言 作为一个程序员&#xff0c;总是要有一个属于自己的博客。然后作为一个造轮子的程序员&#xff0c;肯定不满足于直接使用现有的博客系统&#xff0c;于是我便自己写了一个带后台管理的博客系统。 体验地址&#xff1a; zzzzbw.cn 技术选型 作为一个Javaer&#xff0c;服务…

gitee查看当前账号_upic+gitee图床,自由书写Markdown

使用的软件Typora&#xff1a;Markdown文档编辑器(https://www.typora.io/)upic&#xff1a;图床工具(https://github.com/gee1k/uPic)创建自己的GitHub图床1 创建账号https://gitee.com/,自行创建账号就可以了和github很相似&#xff0c;但是速度更快2创建仓库内容按照自己的习…

CentOS中vsftp安装与配置

1. 安装 使用chkconfig --list来查看是否装有vsftpd服务&#xff1b; 使用yum命令直接安装&#xff1a;yum -y install vsftpd 然后为它创建日志文件&#xff1a;touch /var/log/vsftpd.log 这样简单的两个命令就完成了vsftp的安装&#xff0c;但是如果你现在想这样ftp://your_…

纸上原型设计 VS 桌面原型工具设计,你更喜欢谁?

2019独角兽企业重金招聘Python工程师标准>>> 纸上原型设计&#xff0c;作为传统的原型设计方式&#xff0c;简单快速&#xff0c;成本低廉&#xff0c;为大部分设计师所喜爱。而桌面原型工具设计&#xff0c;作为伴随电脑科技发展而出现的原型设计方式&#xff0c;快…

韩宇:CV学习路线

CV学习路线 对于刚入门CV的同学来说&#xff0c;通过看视频学习效率会比看书高&#xff0c;如下是我亲身实践较为高效的CV学习路线。 1. 计算机视觉概述 计算机视觉本身又包括了诸多不同的研究方向&#xff0c;比较基础和热门的几个方向主要包括&#xff1a; 物体识别和检测…

mysql获取删除的条数_如何从mysql表中删除数百万条记录而不会减速

有没有一种很好的方法来删除很多记录而不会减慢网站的速度&#xff1f;我需要从没有索引和主键的MySQL表中删除数百万条记录。我阅读了SO和网上的各种教程&#xff0c;基本策略是限制删除查询&#xff0c;在删除之间休眠一两秒钟&#xff0c;然后重复此过程直至完成。我也(使用…

某大型银行深化系统之二十:异常规范

传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1异常抛出与捕捉规则 1.1任何抛出异常的方法必须先声明异常 {// Constructorpublic MyClass( String name ) throws NullPointerException, llegalArgumentException {...} } 1.2异常声明后&#xf…

女朋友的Mysql练习题

2019独角兽企业重金招聘Python工程师标准>>> 一、设有一数据库&#xff0c;包括四个表&#xff1a;学生表&#xff08;Student&#xff09;、课程表&#xff08;Course&#xff09;、成绩表&#xff08;Score&#xff09;以及教师信息表&#xff08;Teacher&#xf…

中国电子学会图形化四级编程题:解密

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

python函数模块概念_python中模块和包的概念

1.模块一个.py文件就是一个模块。这个文件的名字是&#xff1a;模块名.py。由此可见在python中&#xff0c;文件名和模块名的差别只是有没有后缀。有后缀是文件名&#xff0c;没有后缀是模块名。每个文件(每个模块)都是一个独立的名称空间&#xff0c;也就是说可以在两个(多个)…

linux-glibc内存管理小结2(内存相关系统调用的实现)

在上一节ptmalloc源码分析中我们提到dlmalloc向系统申请内存的方式有两种, 对应Linux系统下分别是sbrk()与mmap()系统调用. 本节我们就来看下brk()/sbrk()与mmap()/munmap()的实现, 作为切入点来一窥内核内存管理的特点. 在正文开始之前我们先大致描述一下内核内存管理的模型. …

【组队学习】【30期】7. CV中的Transformer

CV中的Transformer 航路开辟者&#xff1a;安晟领航员&#xff1a;尚育鹏航海士&#xff1a;安晟、袁明坤、闫永强 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/dive-into-cv-pytorch [第六章]内容属性&#xff1a;打磨课程内容说明&#xff1a;17年在…

天堂Lineage(單機版)從零開始架設教學

此篇文章 內容大部份連結 已失效&#xff0c; 我已另外寫一篇更快速安裝的文章。 前言: 網路遊戲天堂在數年前&#xff0c;被日本人分析封包的方式。模擬出Lineage server端的行為。 不像天堂II&#xff0c;及RO是由內部洩漏出Server端程式。也由於天堂Server的熱門以至於私服人…