这两天学习了jasperReporForJavaDevelop一书,试用了其中的一个非常简单的Map Datasources的例子,但是一直输出结果为空。我用的是jasper3.5.2的jar的包。请各位大侠指教...
代码如下:import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
 
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRMapArrayDataSource;
 
public class print_test extends HttpServlet
{
  private JRDataSource createReportDataSource()
  {
    JRMapArrayDataSource dataSource;
    Map[] reportRows = initializeMapArray();
 
    dataSource = new JRMapArrayDataSource(reportRows);
 
    return dataSource;
  }
 
  private Map[] initializeMapArray()
  {
    HashMap[] reportRows = new HashMap[4];
    HashMap row1Map = new HashMap();
    HashMap row2Map = new HashMap();
    HashMap row3Map = new HashMap();
    HashMap row4Map = new HashMap();
 
    row1Map.put("tail_num", "N263Y");
    row1Map.put("aircraft_serial", "T-11");
    row1Map.put("aircraft_model", "39 ROSCOE TRNR RACER");
    row1Map.put("engine_model", "R1830 SERIES");
 
    row2Map.put("tail_num", "N4087X");
    row2Map.put("aircraft_serial", "BA100-163");
    row2Map.put("aircraft_model", "BRADLEY AEROBAT");
    row2Map.put("engine_model", "R2800 SERIES");
 
    row3Map.put("tail_num", "N43JE");
    row3Map.put("aircraft_serial", "HAYABUSA 1");
    row3Map.put("aircraft_model", "NAKAJIMA KI-43 IIIA");
    row3Map.put("engine_model", "R1830 SERIES");
 
    row4Map.put("tail_num", "N912S");
    row4Map.put("aircraft_serial", "9973CC");
    row4Map.put("aircraft_model", "PA18-150");
    row4Map.put("engine_model", "R-1820 SER");
 
    reportRows[0] = row1Map;
    reportRows[1] = row2Map;
    reportRows[2] = row3Map;
    reportRows[3] = row4Map;
 
    return reportRows;
  }
 
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    ServletOutputStream servletOutputStream = response.getOutputStream();
    InputStream reportStream = getServletConfig().getServletContext()
        .getResourceAsStream("/resouces/data/AircraftReport.jasper");
 
    try
    {
 
      JRDataSource dataSource = createReportDataSource();
 
      JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream,
          new HashMap(), dataSource);
 
      response.setContentType("application/pdf");
      servletOutputStream.flush();
      servletOutputStream.close();
    }
    catch (Exception e)
    {
      // display stack trace in the browser
      StringWriter stringWriter = new StringWriter();
      PrintWriter printWriter = new PrintWriter(stringWriter);
      e.printStackTrace(printWriter);
      response.setContentType("text/plain");
      response.getOutputStream().print(stringWriter.toString());
    }
  }
}jrxml文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="AircraftReport">
  <field name="tail_num" class="java.lang.String" />
  <field name="aircraft_serial" class="java.lang.String" />
  <field name="aircraft_model" class="java.lang.String" />
  <field name="engine_model" class="java.lang.String" />
  <pageHeader>
    <band height="30">
      <staticText>
        <reportElement x="0" y="0" width="69" height="24" />
        <textElement verticalAlignment="Bottom" />
        <text>
          <![CDATA[Tail Number: ]]>
        </text>
      </staticText>
      <staticText>
        <reportElement x="140" y="0" width="79" height="24" />
        <text>
          <![CDATA[Serial Number: ]]>
        </text>
      </staticText>
      <staticText>
        <reportElement x="280" y="0" width="69" height="24" />
        <text>
          <![CDATA[Model: ]]>
        </text>
      </staticText>
      <staticText>
        <reportElement x="420" y="0" width="69" height="24" />
        <text>
          <![CDATA[Engine: ]]>
        </text>
      </staticText>
    </band>
  </pageHeader>
  <detail>
    <band height="30">
      <textField>
        <reportElement x="0" y="0" width="69" height="24" />
        <textFieldExpression class="java.lang.String">
          <![CDATA[$F{tail_num}]]>
        </textFieldExpression>
      </textField>
      <textField>
        <reportElement x="140" y="0" width="69" height="24" />
        <textFieldExpression class="java.lang.String">
          <![CDATA[$F{aircraft_serial}]]>
        </textFieldExpression>
      </textField>
      <textField>
        <reportElement x="280" y="0" width="69" height="24" />
        <textFieldExpression class="java.lang.String">
          <![CDATA[$F{aircraft_model}]]>
        </textFieldExpression>
      </textField>
 
      <textField>
        <reportElement x="420" y="0" width="69" height="24" />
        <textFieldExpression class="java.lang.String">
          <![CDATA[$F{engine_model}]]>
        </textFieldExpression>
      </textField>
    </band>
  </detail>
</jasperReport>

解决方案 »

  1.   

    在ireport中,你是点击的是Execute(empty data source)还是Execute(with active connection)呢?
      

  2.   

    我是compile empty data source的 我试过很多例子,不但是这本书上的 ,static text都没问题 ,但是通过customdatasource产生的field都不行。不知道是为什么。
      

  3.   

    以下是我的选项,针对第一个例子应该选什么?我是选Empty data source编译的Database JDBC connection
    NetBeans Database JDBC connection
    XML file datasource
    JavaBeans set datasource
    File CSV datasource
    JRDataSourceProvider
    Custom JRDataSource
    Empty data source
    XMLA Server
    Mondrian OLAP connection
    Query Executer mode
    Remote XML file datasource