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

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

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

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

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

 

1.添加JFreeChart

maven代码:

	<dependency>
		<groupId>jfree</groupId>
		<artifactId>jfreechart</artifactId>
		<version>1.0.12</version>
	</dependency>

 

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

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

            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-jfreechart-plugin</artifactId>
                <version>2.1.6</version>
            </dependency>

 这里用的是2.1.6。

 

3.核心哦,集成

3.1.起冲突了

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

    <package name="jfreechart-default" extends="struts-default">
    
    	<result-types>
    		<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult">
    			<param name="height">150</param>
    			<param name="width">200</param>
    		</result-type>
    	</result-types>
    </package>

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

 

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

  <package name="convention-default" extends="struts-default">
  </package>
 

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

    <constant name="struts.convention.default.parent.package"
        value="convention-default" />

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

3.2 搞定冲突

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

    <package name="jfreechart-default" extends="struts-default">
    
    	<result-types>
    		<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult">
    			<param name="height">150</param>
    			<param name="width">200</param>
    		</result-type>
    	</result-types>
    </package>

其实它只是在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:

<package name="convention-jfreechart" extends="convention-default">
    	<result-types>
    		<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult">
    			<param name="height">150</param>
    			<param name="width">200</param>
    		</result-type>
    	</result-types>
</package>

 

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

 然后修改

    <constant name="struts.convention.default.parent.package"
        value="convention-jfreechart" />

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

 

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下,收获肯定不小哦

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值