Struts2.1.6+在convention下集成JFreeChart的配置

阅读更多

最近太忙了,还是更新下吧。

struts2.1增加了插件struts2-convention-plugin来实现零配置,下面就记录下在convention下如何集成JFreeChart。

说明:如果对convention的配置没有了解,我毛遂自荐下这篇文章作为参考:

http://javeye.iteye.com/blog/358744

 

1.添加JFreeChart

maven代码:

	
		jfree
		jfreechart
		1.0.12
	

 

2.添加Struts对JFreeChart的插件支持

众所周知,Struts2要使用JFreeChart需要struts2-jfreechart-plugin插件。maven代码:

            
                org.apache.struts
                struts2-jfreechart-plugin
                2.1.6
            

 这里用的是2.1.6。

 

3.核心哦,集成

3.1.起冲突了

(1) 用winrar打开struts2-jfreechart-plugin-2.1.6.jar,可以看见有一个名为struts-plugin.xml的配置文件,打开该文件,可以看见如下代码:

    
    
    	
    		
    			150
    			200
    		
    	
    

 可以看见这段代码定义了一个名为jfreechart-default的package,它继承了struts-default。

 

(2) 再打开struts2-convention-plugin-2.1.6.jar中的struts-plugin.xml,它定义了一个名为convention-default的 package ,同样继承了struts-default.

  
  
 

我们知道,packege可以继承一个父类的package,可是这两个玩意居然继承的是同一个package:struts-default。他俩成了兄弟关系。问题来了,如果struts要利用convention来实现零配置,则在struts.xml中需要做如下配置:

    

这里,value的值可以使convention-default,也可以是convention-default的子类(暂且这么叫吧),也就是说,要想用convention插件,必须使用conve-default或者它的子类作为package,否则没门!完了,完了,要集成JFreeChart需要用到jfreechart-default这个package,他和convention-default是兄弟关系,可怎么揉到一起呢?

3.2 搞定冲突

想想思路吧,恩,仔细看看freechart-default这个package的定义:

    
    
    	
    		
    			150
    			200
    		
    	
    

其实它只是在package中定义了一个result-type,除此之外,并没有特别之处。我们知道,result type定义了返回的类型,这里定义了一个名为chart的result type,指定的类是org.apache.struts2.dispatcher.ChartResult,这个类的作用很简单,就是将JFreeChart对象的图片转换成OutputStream输出到界面,也即是所有的JFreeChart对象需要这个类的处理才能输出。另外还有两个参数:height,width,他们分别指定了输出图片的高度和高度。当然,你也可以自己实现org.apache.struts2.dispatcher.StrutsResultSupport来定义自己的ChartResult.

 

扯远了,来直接的,jfreechart-default不就定义了一个struts-default没有的result type吗?我把这个result type的拷贝下来,给convention-default一份就ok了。convention-default的定义已经在struts2-convention-plugin-2.1.6.jar中的struts-plugin.xml写死了,所以在struts.xml需要定义一个convention-default的子类package,在这个子类package中来增加result type:


    	
    		
    			150
    			200
    		
    	

 

这样,convention-jfreechart这个package就同时有了convention-default和jfreechart-default的特性了。

 然后修改

    

说到这里,说到这里,很多人都明白完了,我还是继续罗嗦……

 

3.3 指定方法的返回类型

上面都说了,JFreeChart生成后,需要返回ChartResult类进行处理,以OutputStream的方式输出到界面上,所以如果某个方法的功能是生成JFreeChart的图片,则方法生成JFreeChart对象后,需要将指定该方法的返回类型为convention-jfreechart中定义的chart类型。

都知道@Result这个注释吧?那还等什么呢?

@Results( { @Result(name = "chartComplete", type="chart") })
public class JFreeChartAction extends ActionSupport {
………………
public String createpie()
{
生成JFreeChart对象
return "chartComplete";
}
………………
}
 

上面代码的意思是,对ceatepie方法,指定生成JFreeChart对象后的返回值为“chartComplete”,而Action的头部,定义了“chartComplete”的返回类型为“chart”。

 

如上面的,调用/j-free-chart!createpie.action,则返回的就是生成的图片。

 

需要说明的是,本文未对JFreeChart本身做过多的论述,要了解JFreeChart的东东,您google下,收获肯定不小哦

 

你可能感兴趣的:(jfreechart,Struts,maven,Apache,XML)