使用freemarker实现静态模板维护及动态内容展示案例
2017-10-10 16:05
417 查看
1.需求:
例如各类网站上的用户展示对应的合同,不同用户使用的合同模板一样,只是用户信息不一样,静态模板可在后台进行维护操作;用户在前台进行查看时将用户的信息动态渲染到静态模板上再到前台进行展示。
分解需求以上需求有两个技术重点
a.静态模板管理维护。
b.参数数据动态渲染。
2.技术分析:
使用freemarker实现,主要使用到了其渲染机制,参数${name}可以动态获取并渲染成传递过来的参数值,如下图:
该图来自freemarker官网详见http://freemarker.org/ 其实只要满足该机制的模板引擎都可以实现以上需求。
以上满足我们的b需求。
那a需求就是例如将静态模板保存到数据库中,能够支持后台管理人员进行维护,而且模板中的参数格式是需要满足freemarker的标签格式的${参数},而且要包含管理人员定义的参数,因此最好能提供一份参数文档及说明以便人员进行管理。
3.技术实现:
常见的适用freemarker的使用方式为带着参数跳转至已经写好的静态页面上虽然处理机制不变,但页面是静态页面不利于维护,弊端就是每次合同发生更改,需要开发人员进行更改、发布、上线;关键工作繁琐毫无技术含量,这是对资源的一种严重浪费。
于是将静态模板保存在数据库中,管理员可以在文本编辑器中进行维护,现在问题的关键是如何将带参数的模板将参数动态渲染为用户信息并输出:
以下是一个简单的例子
运行以上程序得到结果:客户:张三,已经动态的将参数渲染上去了,接下来就是维护复杂静态模板并参数渲染了。
以上是目前开发中使用的方案,每个环节不一定要与以上一致,能达到同样的效果不局限于使用数据库存储静态模板或是使用freemarker模板引擎,有更好或更有想法的处理方式可以在评论区留言,让大家一起感受。
例如各类网站上的用户展示对应的合同,不同用户使用的合同模板一样,只是用户信息不一样,静态模板可在后台进行维护操作;用户在前台进行查看时将用户的信息动态渲染到静态模板上再到前台进行展示。
分解需求以上需求有两个技术重点
a.静态模板管理维护。
b.参数数据动态渲染。
2.技术分析:
使用freemarker实现,主要使用到了其渲染机制,参数${name}可以动态获取并渲染成传递过来的参数值,如下图:
该图来自freemarker官网详见http://freemarker.org/ 其实只要满足该机制的模板引擎都可以实现以上需求。
以上满足我们的b需求。
那a需求就是例如将静态模板保存到数据库中,能够支持后台管理人员进行维护,而且模板中的参数格式是需要满足freemarker的标签格式的${参数},而且要包含管理人员定义的参数,因此最好能提供一份参数文档及说明以便人员进行管理。
公司名称 ${companyName} 公司地址 ${companyAddr} 公司电话 ${companyTel}
3.技术实现:
常见的适用freemarker的使用方式为带着参数跳转至已经写好的静态页面上虽然处理机制不变,但页面是静态页面不利于维护,弊端就是每次合同发生更改,需要开发人员进行更改、发布、上线;关键工作繁琐毫无技术含量,这是对资源的一种严重浪费。
ModelAndView modelAndView = new ModelAndView("admin/feedActivity/feedActivityConsolUpdate"); FeedActivity feedActivity=feedActivityService.getFeedActivity(id); modelAndView.addObject( "feedActivity",feedActivity); return modelAndView;
于是将静态模板保存在数据库中,管理员可以在文本编辑器中进行维护,现在问题的关键是如何将带参数的模板将参数动态渲染为用户信息并输出:
以下是一个简单的例子
import java.io.StringWriter; import java.io.IOException; import freemarker.cache.StringTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; public static void main(String[] args){ String content = "客户:${clientName}";//合同模板内容 StringWriter writer = new StringWriter(); Configuration configuration = new Configuration(DEFAULT_INCOMPATIBLE_IMPROVEMENTS); StringTemplateLoader stringLoader = new StringTemplateLoader(); stringLoader.putTemplate("contract", content); configuration.setTemplateLoader(stringLoader); try { Template template = configuration.getTemplate("contract","utf-8"); //要动态替换的参数值 Map<String,Object> root = new HashMap<>(); root.put("clientName","张三");//协议编号 try { template.process(root,writer); System.out.println(writer.toString()); } catch (TemplateException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } }
运行以上程序得到结果:客户:张三,已经动态的将参数渲染上去了,接下来就是维护复杂静态模板并参数渲染了。
以上是目前开发中使用的方案,每个环节不一定要与以上一致,能达到同样的效果不局限于使用数据库存储静态模板或是使用freemarker模板引擎,有更好或更有想法的处理方式可以在评论区留言,让大家一起感受。
相关文章推荐
- 使用xml+jsp技术实现网页内容动态显示的方案
- JAVA根据模板将动态内容生成静态网页的代码
- Windows Azure真实案例:Invensys Operations Management -公司使用Windows Azure AppFabric 实现动态节能的智能电网
- Windows Azure真实案例:Invensys Operations Management -公司使用Windows Azure AppFabric 实现动态节能的智能电网
- c#关于网页内容抓取,简单爬虫的实现。(包括动态,静态的)
- 公文处理方案实现之使用模板新建文档并合并正文内容
- 使用FreeMarker/Jsp(WebWork2)生成静态/动态RSS文件
- 使用jQuery插件filtrify实现的超酷动态标签分类摩托车新款展示
- 使用achartengine 实现简单静态、动态折线图
- Windows Azure真实案例:Invensys Operations Management -公司使用Windows Azure AppFabric 实现动态节能的智能电网
- 利用C++模板,代替虚函数实现类的静态多态性及动态继承
- 利用C++模板,代替虚函数实现类的静态多态性及动态继承
- c#关于网页内容抓取,简单爬虫的实现。(包括动态,静态的)
- DWR+freemarker+commons.mail 实现模板定制动态邮件发送 推荐
- 在SharePoint中模板中实现类似框架的结构:使用Splitter分割导航与内容区,拖动调整大小(二)
- wordpress主题实现不同分类内容使用不同样式模板
- 在SharePoint中模板中实现类似框架的结构:使用Splitter分割导航与内容区,拖动调整大小(一)
- 使用jQuery插件filtrify实现的超酷动态标签分类摩托车新款展示
- Windows Azure真实案例:Invensys Operations Management -公司使用Windows Azure AppFabric 实现动态节能的智能电网
- Windows Azure真实案例:Invensys Operations Management -公司使用Windows Azure AppFabric 实现动态节能的智能电网