我的代码是基于struts的,我想实现在代码里加入Map然后在Jsp页面中的代码有超链接。但是在代码里加入map以后,在jsp页面点击查看源代码,里面没有生成<map>标签。然后在struts action里面添加w.flush();在点击查看源文件,里面生成了<map>标签,但是jsp页面是空白页面,jsp源文件除了<map>标签其他什么代码都没有,大家能帮帮忙指点一下小弟吗?看看怎样能实现我想要的功能!
package com.hit.struts.action;import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.urls.StandardPieURLGenerator;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;import com.hit.bean.Order;
import com.hit.persistence.DBOperate;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());
}
//JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
JFreeChart chart = ChartFactory.createPieChart3D("订单调查表", data, true, true, true);
PiePlot3D plot = new PiePlot3D(data);//3D饼图 
plot.setURLGenerator(new StandardPieURLGenerator("barview.jsp"));//设定链接 
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是图片高度 
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session); 
ChartUtilities.writeImageMap(w, filename, info, false);
w.flush();
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"));
   
}
  }
}答案满意有加分

解决方案 »

  1.   

    刚注册csdn问了半天也没人说话,伤心啊,总共才问了两个问题。真是晕死了。积分赶快分一分,以后不上了,没价值!
      

  2.   

    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=<%="#"+filename%>>
          <%= graphURL.toString()%>
          </P>
      

  3.   

    不是很明白楼主的需求,这个是我用的jfreechart的页面
    <%
    String filename = (String)request.getAttribute("filename");
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;%><img src="<%= graphURL %>" align="center" border=0 usemap="#<%= filename %>">
      

  4.   

    用你的也行,不过我主要的问题不是出在这,是出在Map那里,Jsp页面没有生成map标签
      

  5.   

    看一下,你在页面上的
    Object graphURL=request.getAttribute("graphURL");
    Object filename=request.getAttribute("filename");
    得到后输出一下,这两个值得到的都是啥?是不是要改成String的?还有就是你所谓的<map>标签是什么东西,struts1里有这个标签吗?
    是指的<img> 里的usemap属性???
      

  6.   


    虽然是乱写的,但是Object graphURL=request.getAttribute("graphURL");
    Object filename=request.getAttribute("filename");
    不改也行,也能生成饼图。<map>标签是ChartUtilities.writeImageMap(w, filename, info, false);生成的标签,struts里面没有,这是jfreechart里面的。
      

  7.   

    你这个我遇到过,有人说out有冲突,看看servlet机制,然后再想想。
      

  8.   

    <map>标签不是struts 或者什么标签库里的标签ok?
    是页面基本的标签 就和<tr><td>一样
    用来做热点的 不知道还有没有别的用途 我只知道这
      

  9.   

    我也需要画一个热点图。但我的要求和lz不太一样,我们不能用saveChartAsPNG在服务器生成图片文件,而是使用writeChartAsPNG直接输出到div里。map不知道不存文件能否也输出到浏览器中?