欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

FreeMarker与Struts2结合使用

程序员文章站 2022-04-15 13:08:51
       MVC是多年以来一直较为优秀的框架。对于java来说,Mode经常是由JavaBean担当的,Controller是由Serv...
       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

 

 

[java] 

<PRE class=html name="code"><html></PRE><PRE class=html name="code">  <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 as                                     temp>${temp},</#list>]}]    //这里是用了FreeMarker的遍历,其他地方都是highcharts的固定用法,不用管它   

        });    

    });  

      

});  

         </script>  

         <style type="text/css">  

            #container{  

                width:70%;  

                height 300px;  

            }  

         </style>  

    </head>  

      

    <body>  

        <p id="container"></p>  

    </body>  

</html></PRE><BR>  

二、模板解析java类中的方法<PRE class=java name="code">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();  

            }  

        }  

    }</PRE><BR>  

<BR>  

<BR>  

三、action中的执行方法<BR>  

<SPAN style="WHITE-SPACE: pre"></SPAN><PRE class=java name="code">public String execute() throws Exception {  

        TemplateResolution tr = new TemplateResolution();  

        tr.highchartsResolution("highcharts1.ftl","test.html");  

                return Action.SUCCESS;  

    }</PRE><BR>  

<BR>  

<BR>  

三、struts.xml配置<BR>  

<PRE class=html name="code"><action name="test" class="com.lubby.action.ServiceAction">  

            <result type="redirect">/test.html</result>  

        </action></PRE>  

<PRE></PRE>  

<P><BR>  

</P>  

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

 

[html] 

<html>  <html>[html] view plaincopyprint?    <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 as                                     temp>${temp},</#list>]}]    //这里是用了FreeMarker的遍历,其他地方都是highcharts的固定用法,不用管它          });        });        });           </script>           <style type="text/css">              #container{                  width:70%;                  height 300px;              }           </style>      </head>            <body>          <p id="container"></p>      </body>  </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 as temp>${temp},</#list>]}]    //这里是用了FreeMarker的遍历,其他地方都是highcharts的固定用法,不用管它

        });  

    });

    

});

      </script>

      <style type="text/css">

      #container{

      width:70%;

      height 300px;

      }

      </style>

</head>

 

<body>

<p id="container"></p>

</body>

</html>

二、模板解析java类中的方法[java] view plaincopyprint?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();              }          }      }  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中的执行方法

[java] 

public String execute() throws Exception {          TemplateResolution tr = new TemplateResolution();          tr.highchartsResolution("highcharts1.ftl","test.html");                  return Action.SUCCESS;      }  public String execute() throws Exception {

TemplateResolution tr = new TemplateResolution();

tr.highchartsResolution("highcharts1.ftl","test.html");

return Action.SUCCESS;

}

 

 

三、struts.xml配置

[html]

<action name="test" class="com.lubby.action.ServiceAction">              <result type="redirect">/test.html</result>          </action>  <action name="test" class="com.lubby.action.ServiceAction">

<result type="redirect">/test.html</result>

</action>

 

 

 

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

 

分享到: