我是在struts框架里面做的,不知道jsp页面里面为什么没生成连接,请大家帮帮忙。
action代码如下。
public final class ViewProcessOrderAction extends Action{  
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,  
HttpServletResponse response) throws Exception {

    DynaActionForm searchForm = (DynaActionForm) form;         
String keyword = (String)searchForm.get("keyword");
Integer pageId = (Integer)searchForm.get("pageId");
    HttpSession session = request.getSession(true);

List processOrdertList=new DBOperate().getMatchProcessOrders(keyword);

if (processOrdertList.size()==0){           
ActionErrors errors = new ActionErrors();
errors.add(ActionErrors.GLOBAL_MESSAGE,
new ActionError("errors.noMatch"));
if (!errors.isEmpty()) {
saveErrors(request, errors);

   return  mapping.findForward("toWrong");  
}

else{
response.setContentType("text/html;charset=GBK"); 
PrintWriter out = response.getWriter();   DefaultPieDataset data = new DefaultPieDataset();

for(int i=0;i<processOrdertList.size();i++){
Order order = (Order)processOrdertList.get(i);
data.setValue(order.getTime(), order.getPrice());
} PiePlot3D plot = new PiePlot3D(data);//3D饼图 
plot.setURLGenerator(new StandardPieURLGenerator("barview.jsp"));//设定链接 
JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true); 
chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色 
chart.setTitle("订单调查表");//可选,设置图片标题 
plot.setToolTipGenerator(new StandardPieToolTipGenerator()); 
StandardEntityCollection sec = new StandardEntityCollection(); 
ChartRenderingInfo info = new ChartRenderingInfo(sec); 
PrintWriter w = new PrintWriter(out);//输出MAP信息 
//500是图片长度,300是图片高度 
ChartUtilities.writeImageMap(w, "map0", info, false);
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);  String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;  request.setAttribute("filename", filename); 
request.setAttribute("graphURL", graphURL); 
ViewList viewList=new ViewList();
viewList.display (processOrdertList,session,pageId,keyword) ;
    return (mapping.findForward("toListProcessOrder"));
}
  }
}jsp代码如下      <P ALIGN="CENTER">
      <%Object graphURL=request.getAttribute("graphURL"); %>
      <%Object filename=request.getAttribute("filename"); %> 
      <img src="<%= graphURL.toString() %>" width=500 height=300 border=0 usemap="#map0"> 
      <%= graphURL.toString()%>
      </P>
先谢谢啦

解决方案 »

  1.   

    设断点了,图形能出来,但是不显示超连接,我关键是不明白怎样能把那个超链接弄出来,就是设置map那块
      

  2.   

    ChartUtilities.writeImageMap(w, "map0", info, false);
    false改为true试试
      

  3.   

    兄弟,我也研究struts和jfreechart呢,我也遇到Map的问题了,和你遇到的有点不一样
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
    filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
    /*------使用printWriter将文件写出----*/
    ChartUtilities.writeImageMap(pw, filename, info, true);
    pw.flush();
    看到我的了吗?在writeImageMap后面是有这么一句“pw.flush()"
    如果不加我的可以现实图片,但是加了,用mapping最后转发到Jsp页面就会出错,页面一片空白,你也可是试试有没有其他朋友遇到这个问题啊?请教请教
      

  4.   


    ChartUtilities.writeImageMap(w, "map0", info, false);String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session); String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; 个人觉得标红的两部分冲突,你可以改成String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session); 
    ChartUtilities.writeImageMap(w, filename, info, false);
    //注意此句的位置
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; 
      

  5.   

    再次帮你顶,搞了半天也没搞出来,似乎csdn里的人,搞jfreechart的特少!
      

  6.   

    JSP里面是不是应该有个<map name=""></map>?
      

  7.   

    如果不加上pw.flush();jsp页面里就没有<map>标签,如果加上了,页面显示空白页面,但是查看文件的时候有<map>标签。
      

  8.   

    补充一下,如果加上pw.flush();会抛出异常
    严重: Servlet.service() for servlet action threw exception
    java.lang.IllegalStateException: Cannot forward after response has been committed
      

  9.   

    哥们,我用另一种方法搞出来了,就是在jsp页面里调用生成图表的程序,问题的产生应该还是在那个输出流在jsp页面用new PrintWriter(out) ChartUtilities.writeImageMap(pw, filename, info, true); pw参数是由jsp页面的new PrintWriter(out) 传过来的
    pw.flush(); 这样生成的图片就有热区链接
    但是在struts里,PrintWriter out = response.getWriter();
    然后同样的代码ChartUtilities.writeImageMap(pw, filename, info, true); pw参数是由上面那个out传过来的
    pw.flush(); 这种情况就不能生成热区链接,页面转发后是个空白不过我查看了下源文件,可以看到生成map的那段代码,但是没有其他的东西综上所述还是输出流的问题,你再想想问什么?
    ---------------------------------------
    你试试在jsp页面里面调用,肯定可以生成热区链接的我再搞搞,你也好好思考下!
      

  10.   

    我刚看到你上面的帖子,我加了pw.flush();就没有抛异常!
      

  11.   

    而且你的Img里 usemap="#map0"> ???我的是ChartUtilities.writeImageMap(pw, filename, info, false); 所以jsp页面 usemap="#<%=fileName%>"
      

  12.   

    对对,呵呵,我第一次发的确实有毛病,就像你帮我改的那样。但是如果java程序都写在jsp页面就能在图片上生成链接,但在struts里面就不能生成链接。我也认为应该是流的问题,因为我看了一下jfreechart文档,ChartUtilities.writeImageMap返回的是输出流。
    呵呵,我回去也好好看看
      

  13.   

    嗯,你回去好好看看
    ”如果java程序都写在jsp页面就能在图片上生成链接“
    这句话我纠正一下,不是所有程序都写在jsp页面,只是调用方法的那句话写在jsp页面,生成图片的方法还是封装在类文件中还有你说的那个异常,你把pw.flush()放在try块,捕获一下,就行了
      

  14.   

    我期待你能把struts的实现解决,我暂时没时间了,直接把方法调用的那句写在jsp里了,先这么将就交差了,有时间我还是会想的,没彻底解决就郁闷
      

  15.   

    哥们,还有个问题,热区的链接地址,如果参数是中文的,那么在jsp页面,这些参数都变成了乱码,带很多百分号,这个问题也没有解决掉
    靠,csdn有没有高手啊,也不露个面,对这个论坛很失望!
      

  16.   

    我看过有人在网上说过你这个问题,原因可能是:jsp页面内<%@ page contentType="text/html;charset=GBK" language="java" pageEncoding="GBK" %>所针对的是本页面的字符集编码,而你生成的那个<map>标签是后台直接用程序生成的。这个好像的在后台程序里控制一下。你自己再看一下,其实我也没实践。
      

  17.   

    我看过有人在网上说过你这个问题,原因可能是:jsp页面内<%@ page contentType="text/html;charset=GBK" language="java" pageEncoding="GBK" %>所针对的是本页面的字符集编码,而你生成的那个<map>标签是后台直接用程序生成的,jsp的字符集编码管不到map.乱码这个好像可以在后台程序里控制一下。你自己再看一下,其实我也没实践。
      

  18.   

    我看过有人在网上说过你这个问题,原因可能是:jsp页面内<%@ page contentType="text/html;charset=GBK" language="java" pageEncoding="GBK" %>所针对的是本页面的字符集编码,而你生成的那个<map>标签是后台直接用程序生成的,jsp的字符集编码管不到map.乱码这个好像可以在后台程序里控制一下。你自己再看一下,其实我也没实践。
      

  19.   

    嗯,我去网上搜的也是这么说的,不过按照网上说的,response.setContentType这种方式不行,解决中
      

  20.   

    如果你项目统一都设置了utf-8,我想你的应该没问题我的这个项目没有统一设置utf-8,项目里用的是编码转换的方法,但是方法考虑了不太周到,就会出现问题。说一下我的解决方法
    因为生成的map在输出的时候,编码用的是utf-8,生成map的时候不需要加任何的转换,然后你会看到热区上的带中文的参数都是一堆百分号,这个没事,接下来,你就要用request来获取这个参数,再次强调用一下,如果你项目统一用的是utf-8,那么你获取之后的值应该是正确的我的没有设置,默认的字符集是iso-8859-1,所以需要把iso-8859-1再转成utf-8
    只需按下面的就ok了
    String pars =  request.getParameter("map中传过来的带百分号的中文参数");
    par = new String(pars.getBytes("iso-8859-1"),"utf-8");par的值就变成正确的值了,呵呵,你试试
    虽然所有问题都搞定了,但是放在struts调用生成图表,那个输出流和map问题还是个迷,你要是搞好了,告诉我下哦!
      

  21.   

    还有个问题,url后面可以带一个类的参数,比如点苹果,就出现苹果的详情,点香蕉就出现香蕉的详情,这个没问题但是如果我生成的图表是按照很多条件查询生成的,我想点苹果的时候,出现的详情,也是带着很多条件的,这些条件怎么传递到map的url里,这个似乎不行,有别的好方法吗?
      

  22.   

    这个没试过,刚研究jfreechart,上面那个在struts里我还没有实现,你说的那个,我会研究的。弄出来以后告诉你。
      

  23.   

    struts+jfreechart生成热点图片的连接在action中添加如下代码  String imageMap = ImageMapUtilities.getImageMap("map0", info);得到map的字符串,然后射到界面中,注意,用request传到界面中
      request.setAttribute("map1", imageMap);//无法用输出流来返回请求然后在界面中用此方式接受  ${map1}就可以。