Nirmal
Nirmal

Reputation: 4829

JasperReport Issue using with struts2 - getting null in final PDF file

Im writing my jasper report problem with struts2. Following is the code that I'm trying to execute :

struts.xml contains :

<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>

My JasperAction1 contains :

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;
    }
}

I am using iReport plugin of Netbeans for generation .jrxml file. After Designing my page using iReport wizard my our_jasper_template.jrxml file contains following code :

<?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>

Now the problem I'm facing is when I execute this action class it gives me following output as pdf format : alt text

Upvotes: 1

Views: 5573

Answers (2)

Vikas
Vikas

Reputation: 24332

Just Remove Query string portion from your .jrxml file and change your field name with account class's variable Name.

Upvotes: 1

waxwing
waxwing

Reputation: 18783

Although I may not have the final solution, there is a detail that looks odd to me: your fields account_master_name and account_master_id don't really seem to align with the property names of your Account class. Shouldn't it be id and name? What's weird to me is that it should generate an error when filling the report...

I am not too familiar with Struts, but I don't see how it can affect.

Upvotes: 0

Related Questions