FreeMarker与Struts2结合使用

MVC是多年以来一直较为优秀的框架。对于java来说,Mode经常是由JavaBean担当的,Controller是由Servlet担当,View是由JSP担当的。JSP确实很优秀,功能强大,甚至可以直接在里面写java代码(scriptlet),他的自定义标签功能更是强大无比。然而在JSP可以被直接访问,所以不是完全符合MVC的标准,,直接写java代码导致后期维护和可扩展性大大的降低了,其实个人觉得这个完全可以从人为上去改变,大不了不在JSP中写java代码。每次都让客户端访问Servlet后再跳转到JSP,这都是完全可以由编程人员解决的事情。在JSP推出后,有两款比较出名的模板引擎可以完全代替JSP,那就是Velocity和FreeMarker。由于FreeMarker是在Velocity之后出来的所以其综合功能要比Velocity强大。这两天自己试着写了个Freemarker和Struts2结合的Demo,其中模板是随便写了个jQuery的图标工具–highcharts。

一、模板文件 highcharts1.ftl

<html><head><title>jqGrid&FreeMarker Test</title> <script src="js/jquery-1.8.3.js" type="text/javascript"></script><script src="js/highcharts.js" type="text/javascript"></script><script type="text/javascript" >$(function () {var chart;$(document).ready(function() {chart = new Highcharts.Chart({chart: {renderTo: ‘container’,type: ‘column’, //spline曲线line直线pie饼状bar横向条状scatter 散状等marginRight: 100,marginBottom: 25},title: {text: ‘2012年气温变化表’,x: 0 //center},subtitle: {text: ‘合肥气象台提供’,x: 0},xAxis: {categories: [‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’, ‘May’, ‘Jun’,’Jul’, ‘Aug’, ‘Sep’, ‘Oct’, ‘Nov’, ‘Dec’]},yAxis: {title: {text: ‘温度 (°C)’},plotLines: [{value: 0,width: 1,color: ‘#808080’}]},tooltip: {formatter: function() {return ‘<b>’+ this.series.name +'</b><br/>’+this.x +’: ‘+ this.y +’°C’;}},legend: {layout: ‘vertical’,align: ‘right’,verticalAlign: ‘top’,x: 0,y: 0,borderWidth: 0},series: [{name: ‘马鞍山’,data: [<#list mas as temp>${temp},</#list>]}, { name: ‘芜湖’,data: [<#list wh as temp>${temp},</#list>]},{name: ‘合肥’,data: [<#list hf astemp>${temp},</#list>]}] //这里是用了FreeMarker的遍历,其他地方都是highcharts的固定用法,不用管它});});});</script><style type="text/css">#container{width:70%;height 300px;}</style></head><body><div id="container"></div></body></html>二、模板解析java类中的方法public void highchartsResolution(String templateFileName, String htmlName) {List<Integer> list = null;Writer out = null;Configuration cfg = new Configuration();cfg.setServletContextForTemplateLoading(ServletActionContext.getServletContext(), "TemplateFiles");cfg.setDefaultEncoding("UTF-8");Map root = new HashMap();try {Template template = cfg.getTemplate(templateFileName);String path = ServletActionContext.getServletContext().getRealPath("/");File file = new File(path + htmlName);out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));root.put("hf", tdao.getTemperatureByCity("合肥"));root.put("mas", tdao.getTemperatureByCity("马鞍山"));root.put("wh", tdao.getTemperatureByCity("芜湖"));template.process(root, out);} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();} finally {try {out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}}三、action中的执行方法public String execute() throws Exception {TemplateResolution tr = new TemplateResolution();tr.highchartsResolution("highcharts1.ftl","test.html");return Action.SUCCESS;}三、struts.xml配置<action name="test" class="com.lubby.action.ServiceAction"><result type="redirect">/test.html</result></action>

如果有想要源码的可以给我留言哈!

抱最大的希望,为最大的努力,做最坏的打算

FreeMarker与Struts2结合使用

相关文章:

你感兴趣的文章:

标签云: