<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>crabbydonkey</title>
    <description></description>
    <link>http://crabbydonkey.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Using JFreeChart in JSF</title>
        <author>crabbydonkey</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://crabbydonkey.javaeye.com">crabbydonkey</a>&nbsp;
          链接：<a href="http://crabbydonkey.javaeye.com/blog/170600" style="color:red;">http://crabbydonkey.javaeye.com/blog/170600</a>&nbsp;
          发表时间: 2008年03月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          關于JFreeChart的介紹和JFreeChart的研究在網上到處都是,但是我發現沒有在JSF項目中使用的,今天我來說說我在JSF項目中如何動態創建JFreeChart的吧 <br /><br /><strong>第一步:</strong> <br />創建JFreeChart 中的BarChart和Linechart：兩個類與之對應并使用它們其中的init方法來創建,具體如何創建兩個chart代碼我就不寫了. <br /><br /><strong>第二步:</strong> <br />第一步中創建了兩個類:BarChart和LineChart,并讓它們提供了兩個構建chart的靜態方法initBarChart和initLineChart. <br />接著通過使用JBoss的a4j:mediaOutput組件來在頁面上呈現所生成的圖片,并使用JFreeChart提供的ChartUtilities.writeImageMap()和ChartUtilities.getImageMap()生成并獲取到與生成的圖片對應的map,這樣就達到了在圖片上點選節點的時候顯示你所設定好的詳細信息了 <br /><br />backingbean和jsp的代碼如下: <br /><br /><br />JSF backingbean <br /><br /><pre name="code" class="java">import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.faces.event.ActionEvent;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;

public class JFreeChartBean {

	private JFreeChart chart;
	
	private String mapCode;
	
	private ByteArrayOutputStream outputStream;

	public JFreeChartBean() {
		
	}

	public void selectBarChart(ActionEvent e) {
		chart = BarChart.initBarChart();
	}

	public void selectLineChart(ActionEvent e) {
		chart = LineChart.initLineChart();
	}
         //a4j:mediaOutput組件創建圖片的方法
	public void paint(OutputStream out, Object object) throws IOException {
		try {
			byte[] b = outputStream.toByteArray();
			out.write(b);
			out.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public JFreeChart getChart() {
		if (chart == null) {
			chart = BarChart.initBarChart();
		}
		return chart;
	}

	public void setChart(JFreeChart chart) {
		this.chart = chart;
	}
	//獲取到與生成的圖片對應的map
	public String getMapCode() {
		PrintWriter pw = null;
		try {
			ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
			outputStream = new ByteArrayOutputStream();
			ChartUtilities.writeChartAsPNG(outputStream,getChart(),500,300, info);
			pw = new PrintWriter(outputStream);
			ChartUtilities.writeImageMap(pw, &quot;imgMap&quot;, info, false);
			mapCode = ChartUtilities.getImageMap(&quot;imgMap&quot;, info);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return mapCode;
	}

	
	public void setMapCode(String mapCode) {
		this.mapCode = mapCode;
	}
    </pre><br /><br />chart.jsp <br /><br /><pre name="code" class="java">    
&lt;h:form id=&quot;jFreeChartForm&quot;&gt;
		&lt;t:panelGrid columns=&quot;2&quot;&gt;
		&lt;a4j:commandButton value=&quot;BarChart&quot; immediate=&quot;true&quot; actionListener=&quot;#{jFreeChartBean.selectBarChart}&quot; reRender=&quot;outMap,chart,jFreeChartForm&quot;/&gt;
		&lt;a4j:commandButton value=&quot;LineChart&quot; immediate=&quot;true&quot; actionListener=&quot;#{jFreeChartBean.selectLineChart}&quot; reRender=&quot;outMap,chart,jFreeChartForm&quot;/&gt;
		&lt;/t:panelGrid&gt;
		&lt;a4j:mediaOutput id=&quot;chart&quot;  element=&quot;img&quot;  cacheable=&quot;false&quot;  session=&quot;false&quot; ismap=&quot;true&quot; usemap=&quot;#imgMap&quot;
			createContent=&quot;#{jFreeChartBean.paint}&quot; mimeType=&quot;image/jpeg&quot;/&gt;
		&lt;t:outputText id=&quot;outMap&quot; escape=&quot;false&quot; value=&quot;#{jFreeChartBean2.mapCode}&quot;&gt;&lt;/t:outputText&gt; 
	&lt;/h:form&gt;

</pre><br /><br /><strong>ps:上面的代碼沒有配置額外的servlet</strong> <br /><br /><br /><br />例圖: <br /><p><img src="../../../upload/picture/pic/9200/f6bb1ec2-d500-34fc-b0a4-0a3d63548ca2.jpg" border="0" height="341" alt="" width="519" /></p><p>&nbsp;</p><p>&nbsp;<img src="../../../upload/picture/pic/9230/71b8f0b0-0984-392a-9871-21fddc141ba1.jpg" border="0" height="1" alt="" width="1" /><img src="../../../upload/picture/pic/9230/71b8f0b0-0984-392a-9871-21fddc141ba1.jpg" border="0" height="345" alt="" width="512" /></p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://crabbydonkey.javaeye.com/blog/170600#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 12 Mar 2008 17:32:06 +0800</pubDate>
        <link>http://crabbydonkey.javaeye.com/blog/170600</link>
        <guid>http://crabbydonkey.javaeye.com/blog/170600</guid>
      </item>
      <item>
        <title>TREE!!</title>
        <author>crabbydonkey</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://crabbydonkey.javaeye.com">crabbydonkey</a>&nbsp;
          链接：<a href="http://crabbydonkey.javaeye.com/blog/53253" style="color:red;">http://crabbydonkey.javaeye.com/blog/53253</a>&nbsp;
          发表时间: 2007年02月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>此树使用脚本语言JS，dojo组件,DOM API，WebFx 的树控件XTree.<br />使用DOJO组件从XML文件中读取所有数据，并且DOM API配合XTREE 对内存中的数据操作，一次性生成树。</strong><br /><strong>流程:<br />代码片断:</strong>	<br />1.	使用dojo组件从xml文件读取数据.<br /><br /><pre name="code" class="java">	loadTreeMenu:function() {
		var treeMenuLoader = this;
		var menu = 'me';
		var par = window.location.search;
		if (par.length != 0)
			menu = par.substring(7, (par.length - 1));
		var url = "tree.xml";
		var bindArgs = {
			url: url,
			mimetype: "text/xml",
			method: "post",
			content: {'menu': menu},
			load: function(type, data, evt){
				treeMenuLoader.treeMenuData = data.selectSingleNode('/MenuConfig/Menu[@id="' + menu + '"]');
				treeMenuLoader.rendTree.call(treeMenuLoader);
} 
		};
		dojo.io.bind(bindArgs);
	},
</pre><br /><br /><br />2.	编写rendTree和addItem 两个方法对返回的数据操作, 结合使用WebFx 的树控件XTree生成树.<br />代码片断:<br /><pre name="code" class="java">rendTree: function() {
		var treeMenuLoader = this;
		var treeMenuData = treeMenuLoader.treeMenuData;
		var webFXTreeConfig = {
			usePersistence:true
		};
		var tree = new WebFXTree('root', treeMenuData.getAttribute("title"), '', '', treeMenuData.getAttribute("image"), treeMenuData.getAttribute("image"));
		var childNodesData = treeMenuData.selectNodes('Item');
		dojo.lang.forEach(childNodesData, function(childNodeData) {
			treeMenuLoader.addItem(tree, childNodeData);
		});
		dojo.byId('menuTree').innerHTML = tree;
	},
	addItem:function(tree, node) {
		var treeMenuLoader = this;
		var sText = node.getAttribute('title');
		var id = node.getAttribute('id');
		var sAction = node.getAttribute('page');
		var sTarget = node.getAttribute('target');
		if(sTarget == null)
			sTarget = 'mainFrame';
		var sTip = node.getAttribute('toolTip');
		var sIcon = node.getAttribute('image');
		var item = new WebFXTreeItem(id, sText, sAction, sTarget, sTip, null, sIcon, sIcon);
		var nodes = node.selectNodes('Item');
		dojo.lang.forEach(nodes, function(node) {
			treeMenuLoader.addItem(item, node);
		});
		tree.add(item);
	}
</pre><br />大家可以下载附件,说明和例子全都有....希望大家发表评论.我好吸取经验..
          <br/>
          <span style="color:red;">
            <a href="http://crabbydonkey.javaeye.com/blog/53253#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 Feb 2007 17:54:35 +0800</pubDate>
        <link>http://crabbydonkey.javaeye.com/blog/53253</link>
        <guid>http://crabbydonkey.javaeye.com/blog/53253</guid>
      </item>
  </channel>
</rss>