2.JSP页面中:
<%
String filename = WebChart.generateBarChart( session, new PrintWriter(out) );
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
System.out.println( graphURL );
WebDataSet webdataset = new WebDataSet();
ArrayList dateList = webdataset.getData();
%>
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">
我以前也没有这样写过.不知会不会出现你的第二个问题中所出面的情况.你可以试试.
我以前是用的这种方式(在Struts中):
<html:img page="/barChartAction.do"/>
因为我这种方式并不生成什么文件.而是直接在页面上输出.
<%
String filename = WebChart.generateBarChart( session, new PrintWriter(out) );
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
System.out.println( graphURL );
WebDataSet webdataset = new WebDataSet();
ArrayList dateList = webdataset.getData();
%>
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">
我以前也没有这样写过.不知会不会出现你的第二个问题中所出面的情况.你可以试试.
我以前是用的这种方式(在Struts中):
<html:img page="/barChartAction.do"/>
因为我这种方式并不生成什么文件.而是直接在页面上输出.
解决方案 »
- java能不能从后台直接调用页面
- jsp新手,小问题求救下
- javascribe问题
- dom4j解析XML
- 请问目前最好用的,bug最少的jsp免费论坛是什么?天乙么?
- 在调试JSP+JAVABEAN时,出现javax.servletException:(wrong name:)错误,如何解决
- 100分紧急求助,如果把jdk和tomcat打包一起安装?
- 用jspsmartupload上传文件时如何在本页面取出文件名,并截去扩展名放中一个文本框中
- 怎么用cookie保存商品浏览记录?
- json异常
- 统计一下.大家谈谈开发基于Internet/Intranet应用软件都使用哪些开发工具.并谈谈各自优缺点!!!!
- JFreechart的应用问题
能不能具体说说你代码的思路,我有点不太懂我现在页面上是调用类完成chart的生成,然后再在当前页下显示它,就出现我所说的问题了!
<%
String filename = WebChart.generateBarChart( session, new PrintWriter(out) );
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
System.out.println( graphURL );
WebDataSet webdataset = new WebDataSet();
ArrayList dateList = webdataset.getData();
%>
-------------------------------------------------------------------------------
这样写生成一个图片文件,在服务器的临时文件夹下面。to:搂主,你每次都生成文件名相同,就会出错。例如第一次生成a.jpg,第二次要生成a.jpg的时候,这个文件已经存在了。jfreechart就会出错。建议你,每次生成的时候先判断文件是否存在,如果存在就删除,重新生成。第一个问题,我帮你看看,现在想不起来了
Action:
public class BarChartAction extends Action {
private static final String CONTENT_TYPE = "image/jpeg";
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
response.setContentType( CONTENT_TYPE );
BarDataSet dataset = new BarDataSet();
ArrayList list = dataset.getData(); if( list.size() == 0 ){
System.out.println( "テサモミハセン." );
} Iterator iter = list.listIterator();
DefaultCategoryDataset chartdataset = new DefaultCategoryDataset();
while( iter.hasNext() ){
BarChart bc = (BarChart)iter.next();
chartdataset.addValue( new Long(bc.getHsAnnuity()), null, bc.getColumnName() );
} CategoryAxis categoryAxis = new CategoryAxis("");
ValueAxis valueAxis = new NumberAxis("");
BarRenderer renderer = new BarRenderer();
renderer.setItemURLGenerator( new StandardCategoryURLGenerator( "xy_chart.jsp", "series", "section" ) );
renderer.setToolTipGenerator( new StandardCategoryToolTipGenerator() ); Plot plot = new CategoryPlot( chartdataset, categoryAxis, valueAxis, renderer );
JFreeChart chart = new JFreeChart( "60ヒ・ホオトコ愷・・, JFreeChart.DEFAULT_TITLE_FONT, plot, false );
chart.setBackgroundPaint( java.awt.Color.white ); ChartRenderingInfo info = new ChartRenderingInfo( new StandardEntityCollection() ); try {
ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 100, chart,
600, 400);
}
catch (IOException ex) {
ex.printStackTrace();
} return null;
}
}
bean:
package com.fanchina.jfree.bean;public class BarChart {
private String columnName;
private long hsAnnuity; public BarChart( String columnName, long hsAnnuity ){
this.columnName = columnName;
this.hsAnnuity = hsAnnuity;
} public void setColumnName( String columnName ){
this.columnName = columnName;
} public void setHsAnnuity( long hsAnnuity ){
this.hsAnnuity = hsAnnuity;
} public String getColumnName(){
return this.columnName;
} public long getHsAnnuity(){
return this.hsAnnuity;
}
}
setBean(这个类主要是从数据库中取数据,这里为了简单就这样了)
public class BarDataSet {
private ArrayList data = new ArrayList(); public BarDataSet() {/*
data.add(new BarChart( "60", 101923 ) );
data.add(new BarChart( "61", 113125 ) );
data.add(new BarChart( "62", 122148 ) );
data.add(new BarChart( "63", 117434 ) );
data.add(new BarChart( "64", 133256 ) );
data.add(new BarChart( "65", 157654 ) );
data.add(new BarChart( "66", 195356 ) );
data.add(new BarChart( "67", 122567 ) );
data.add(new BarChart( "68", 146343 ) );
data.add(new BarChart( "69", 184558 ) );*/
data.add( 0, new IeFor60_Bean( 250, 60, 50, 0, 0, 60, 40, 0 ) );
data.add( 1, new IeFor60_Bean( 260, 60, 50, 0, 0, 60, 40, 0 ) );
data.add( 2, new IeFor60_Bean( 270, 60, 50, 0, 0, 60, 40, 0 ) );
data.add( 3, new IeFor60_Bean( 280, 60, 50, 0, 40, 60, 40, 0 ) );
data.add( 4, new IeFor60_Bean( 290, 60, 50, 0, 40, 60, 40, 0 ) );
data.add( 5, new IeFor60_Bean( 300, 60, 0, 130, 0, 0, 40, 0 ) );
data.add( 6, new IeFor60_Bean( 310, 60, 0, 145, 0, 0, 40, 0 ) );
data.add( 7, new IeFor60_Bean( 320, 60, 0, 150, 0, 0, 40, 0 ) );
data.add( 8, new IeFor60_Bean( 330, 60, 0, 155, 0, 0, 40, 0 ) );
data.add( 9, new IeFor60_Bean( 340, 60, 0, 160, 0, 0, 40, 0 ) );
data.add( 10, new IeFor60_Bean( 350, 60, 0, 165, 0, 0, 40, 0 ) );
} public ArrayList getData(){
return this.data;
}}
最后JSP:
<%@ page contentType="text/html; charset=GB2312" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html>
<head>
<title>
bar_chart
</title>
</head>
<body bgcolor="#ffffff">
<h1>
JBuilder Generated JSP
</h1>
<p>
<html:img page="/barChartAction.jspx"/>
</body>
</html>
我用的是ChartDirector这个好用
思路大概是(我也好长时间没碰了:))
JSP中通过这句话来调用Action<html:img page="/barChartAction.jspx"/>
然后Action就从DB类用取得数据,在放到bean中,做jfreechart的设置.这样就可以生成图了.也就是把Action变成了图片。因为Action中有这样的设置:private static final String CONTENT_TYPE = "image/jpeg";那么它现在已经不是"text/html"了。
你可以看到Action最后返回的是null。在Struts-config.xml中的配置也很简单:
<action type="action.BarChartAction" path="/barChartAction" />就可以了。这个例子在servlet中也可以实现。只不过是把Action改成servlet而已。
惭愧啊,以前没用过struts,看来我得先找点struts的书看看才行,
能简单指点一下struts吗?