2009-05-29 14 views
1

我正在写我的碧玉报告问题struts2。下面是我试图执行代码:JasperReport问题与struts2一起使用 - 在最终的PDF文件中获得空值

struts.xml中包含:

<action name="myJasperTest1" class="temp.JasperAction1"> 
    <result name="success" type="jasper"> 
     <param name="location">/jasper/our_compiled_template.jasper</param> 
     <param name="dataSource">myList</param> 
     <param name="format">PDF</param> 
    </result> 
</action> 

我JasperAction1包含:

import java.util.ArrayList; 
import java.util.List; 
import java.io.FileInputStream; 
import com.opensymphony.xwork2.ActionSupport; 
import com.sufalam.business.model.util.LegacyJasperInputStream; 
import com.sufalam.business.finance.model.bean.Account; 
import net.sf.jasperreports.engine.JasperCompileManager; 
import net.sf.jasperreports.engine.design.JasperDesign; 
import net.sf.jasperreports.engine.xml.JRXmlLoader; 

public class JasperAction1 extends ActionSupport { 

    /** List to use as our JasperReports dataSource. */ 
    private List<Account> myList; 

    public String execute() throws Exception { 

     // Create some imaginary persons. 
     Account a1 = new Account(); 
     Account a2 = new Account(); 

     a1.setId(77); 
     a1.setName("aaa"); 
     a2.setId(88); 
     a2.setName("bbb"); 
     // Store people in our dataSource list (normally would come from database). 
     myList = new ArrayList<Account>(); 
     myList.add(a1); 
     myList.add(a2); 

     // Normally we would provide a pre-compiled .jrxml file 
     // or check to make sure we don't compile on every request. 
     try { 
      JasperDesign design = JRXmlLoader.load(
        new LegacyJasperInputStream(new FileInputStream("F://backup//report2.jrxml"))); 

      JasperCompileManager.compileReportToFile(design, "F://backup//our_compiled_template1.jasper"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return ERROR; 
     } 

     return SUCCESS; 
    } 

    public List<Account> getMyList() { 
     return myList; 
    } 
} 

我使用的iReport插件 Netbeans的用于生成.jrxml文件。使用iReport的向导我our_jasper_template.jrxml文件设计我的网页后,包含下面的代码:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="null" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <queryString language="SQL"> 
      <![CDATA[SELECT 
     account_master."name" AS account_master_name, 
     account_master."id" AS account_master_id 
    FROM 
     "public"."account_master" account_master]]> 
    </queryString> 
    <field name="account_master_name" class="java.lang.String"/> 
    <field name="account_master_id" class="java.lang.Integer"/> 
    <title> 
     <band height="58"> 
      <line> 
       <reportElement x="0" y="8" width="555" height="1"/> 
      </line> 
      <line> 
       <reportElement positionType="FixRelativeToBottom" x="0" y="51" width="555" height="1"/> 
      </line> 
      <staticText> 
       <reportElement x="65" y="13" width="424" height="35"/> 
       <textElement textAlignment="Center"> 
        <font size="26" isBold="true"/> 
       </textElement> 
       <text><![CDATA[Classic template]]> 
       </text> 
      </staticText> 
     </band> 
    </title> 
    <detail> 
     <band height="40"> 
      <staticText> 
       <reportElement x="0" y="0" width="139" height="20"/> 
       <textElement> 
        <font size="12"/> 
       </textElement> 
       <text><![CDATA[account_master_name]]> 
       </text> 
      </staticText> 
      <textField> 
       <reportElement x="139" y="0" width="416" height="20"/> 
       <textElement> 
        <font size="12"/> 
       </textElement> 
       <textFieldExpression class="java.lang.String"><![CDATA[$F{account_master_name}]]> 
       </textFieldExpression> 
      </textField> 
      <staticText> 
       <reportElement x="0" y="20" width="139" height="20"/> 
       <textElement> 
        <font size="12"/> 
       </textElement> 
       <text><![CDATA[account_master_id]]> 
       </text> 
      </staticText> 
      <textField> 
       <reportElement x="139" y="20" width="416" height="20"/> 
       <textElement> 
        <font size="12"/> 
       </textElement> 
       <textFieldExpression class="java.lang.Integer"><![CDATA[$F{account_master_id}]]> 
       </textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
    <pageFooter> 
     <band height="26"> 
      <textField evaluationTime="Report" pattern="" isBlankWhenNull="false"> 
       <reportElement key="textField" x="516" y="6" width="36" height="19" forecolor="#000000" backcolor="#FFFFFF"/> 
       <box> 
        <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
        <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
        <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
        <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
       </box> 
       <textElement> 
        <font size="10"/> 
       </textElement> 
       <textFieldExpression class="java.lang.String"><![CDATA["" + $V{PAGE_NUMBER}]]> 
       </textFieldExpression> 
      </textField> 
      <textField pattern="" isBlankWhenNull="false"> 
       <reportElement key="textField" x="342" y="6" width="170" height="19" forecolor="#000000" backcolor="#FFFFFF"/> 
       <box> 
        <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
        <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
        <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
        <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
       </box> 
       <textElement textAlignment="Right"> 
        <font size="10"/> 
       </textElement> 
       <textFieldExpression class="java.lang.String"><![CDATA["Page " + $V{PAGE_NUMBER} + " of "]]> 
       </textFieldExpression> 
      </textField> 
      <textField pattern="" isBlankWhenNull="false"> 
       <reportElement key="textField" x="1" y="6" width="209" height="19" forecolor="#000000" backcolor="#FFFFFF"/> 
       <box> 
        <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
        <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
        <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
        <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> 
       </box> 
       <textElement> 
        <font size="10"/> 
       </textElement> 
       <textFieldExpression class="java.util.Date"><![CDATA[new Date()]]> 
       </textFieldExpression> 
      </textField> 
     </band> 
    </pageFooter> 
</jasperReport> 

现在我面临的问题是,当我执行这个动作类它给了我下面的PDF格式输出: alt text

回答

1

只需从您的.jrxml文件中删除查询字符串部分,然后使用帐户类的变量名称更改您的字段名称。

0

虽然我可能没有最终的解决方案,但有一个细节看起来很奇怪:您的字段account_master_nameaccount_master_id似乎并不真正与您的Account类的属性名称保持一致。它不应该是idname?我觉得奇怪的是,填写报告时应该会产生一个错误...

我对Struts并不太熟悉,但我不明白它是如何影响的。

+0

亚,但我试图改变ID和名称作为一个字段名称。但是,我仍然得到空值,因此在填写报告时不会出现错误。 DEBUG向我展示填充:null不是错误...您的任何建议? – Nirmal 2009-06-02 05:44:38