我已经在带有报告的Struts2
框架中创建了一个应用程序。Jasper
在索引页面中,当我单击一个按钮时,我会得到显示为 pdf 的报告。
但我非常关心我的实施。我所做的实施是正确的方法吗?
因为我在几个教程中注意到在 struts2 中调用 jasper 有点像:
<action name="myJasperTest" class="com.acme.test.action.JasperAction">
<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>
但我不知道如何通过上述方式将参数传递给查询?谁能告诉我一些解决方案或建议
索引.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<s:form action="getUserDetails" method="post">
<s:submit value="Show" onclick="this.form.target='_blank';return true;"/>
</s:form>
</body>
</html>
JasperReport.java
package commonpackage;
import com.opensymphony.xwork2.ActionSupport;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import org.apache.struts2.ServletActionContext;
public class JasperReport extends ActionSupport
{
private String userid="1";
public InputStream inputStream;
public String getUserDetails() throws ClassNotFoundException{
try {
Class.forName("com.mysql.jdbc.Driver");
Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ortms", "root", "");
String str;
str = ServletActionContext.getServletContext().getRealPath("/reports/myreport.jrxml");
JasperDesign jd=JRXmlLoader.load(str);
Map parameters = new HashMap();
parameters.put("userid", userid);
net.sf.jasperreports.engine.JasperReport jr = JasperCompileManager.compileReport(jd);
JasperPrint jp=JasperFillManager.fillReport(jr, parameters,cn);
JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, ServletActionContext.getServletContext().getRealPath("/reports/myreport.pdf"));
exporter.exportReport();
File file = new File(ServletActionContext.getServletContext().getRealPath("/reports/myreport.pdf"));
inputStream = new DataInputStream( new FileInputStream(file));
return SUCCESS;
} catch (Exception e) {
System.out.println("Exception in getUserDetails in JasperReport class");
e.printStackTrace();
}
return SUCCESS;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public InputStream getInputStream() {
return inputStream;
}
}
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="example.xml"/>
<!-- Configuration for the default package. -->
<package name="default" extends="struts-default">
<action name="getUserDetails" class="commonpackage.JasperReport" method="getUserDetails">
<result name="success" type="stream">
<param name="contentType">application/pdf</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">inline;filename="UserReport.pdf"</param>
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
我的报告.jrmxl
<?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="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="70b2040b-a566-48b5-8e8e-a01d402007e3">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="userid" class="java.lang.String">
<defaultValueExpression><![CDATA[0]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT
table_users.`id` AS table_users_id,
table_users.`user_code` AS table_users_user_code,
table_users.`first_name` AS table_users_first_name,
table_users.`last_name` AS table_users_last_name
FROM
`table_users` table_users WHERE table_users.`id`=$P{userid}]]>
</queryString>
<field name="table_users_id" class="java.lang.Integer"/>
<field name="table_users_user_code" class="java.lang.String"/>
<field name="table_users_first_name" class="java.lang.String"/>
<field name="table_users_last_name" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="20" splitType="Stretch">
<staticText>
<reportElement uuid="ca3f2664-22a6-4f31-b04b-f61b774d2dc3" x="33" y="0" width="100" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[ID]]></text>
</staticText>
<staticText>
<reportElement uuid="ca3f2664-22a6-4f31-b04b-f61b774d2dc3" x="132" y="0" width="100" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[CODE]]></text>
</staticText>
<staticText>
<reportElement uuid="ca3f2664-22a6-4f31-b04b-f61b774d2dc3" x="232" y="0" width="100" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[FIRST NAME]]></text>
</staticText>
<staticText>
<reportElement uuid="ca3f2664-22a6-4f31-b04b-f61b774d2dc3" x="332" y="0" width="100" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[LAST NAME]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement uuid="095242c4-b1b5-4545-897c-315f3bbe37a2" x="33" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{table_users_id}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="095242c4-b1b5-4545-897c-315f3bbe37a2" x="133" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{table_users_user_code}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="095242c4-b1b5-4545-897c-315f3bbe37a2" x="232" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{table_users_first_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="095242c4-b1b5-4545-897c-315f3bbe37a2" x="332" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{table_users_last_name}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>