这里的是定方法主要参照sturts2-jasperreport-plugin的完成方法(其实就是抄的)

PDF的样子是这样的两页的pdf

然后action的配置是这样的(不要在意格式)

@ParentPackage("HulftPackage")
@Namespace("/")
@Action(value = "testreport",
results = {
@Result(name = "success", type = "jasper", params={
"location","/WEB-INF/report/report5.jasper",
"format", "PDF",
"dataSource","mySource",
"reportKey","myfirstreport",
"exportParameters","param",
})
}
)
public class TestReportAction extends ActionSupport { private Connection conn = null; @Override public String execute() throws Exception { conn = getConnection(); mySource = new ArrayList<ReportData>();
ReportData data = new ReportData();
data.setId("001");
data.setName("陈");
data.setClassName("一班"); List<ReportChild> clist = new ArrayList<ReportChild>(); ReportChild child = new ReportChild();
child.setCourseName("合格");
child.setDegree(33);
clist.add(child);
child = new ReportChild();
child.setCourseName("不合格");
child.setDegree(67);
clist.add(child); data.setChild(clist); mySource.add(data); data = new ReportData();
data.setId("002");
data.setName("拉拉");
data.setClassName("二班"); clist = new ArrayList<ReportChild>();
child = new ReportChild();
child.setCourseName("合格");
child.setDegree(11);
clist.add(child);
child = new ReportChild();
child.setCourseName("不合格");
child.setDegree(89);
clist.add(child); data.setChild(clist); mySource.add(data); return SUCCESS; } public Map param; public Map getParam()
{
HashMap a = new HashMap();
a.put("testmyp", "sadfdsafdsaf");
return a;
} private List<ReportData> mySource; public List<ReportData> getMySource()
{
return mySource;
} public Connection getConn() { return conn; } private static Connection getConnection()throws ClassNotFoundException,SQLException{ String driver="oracle.jdbc.driver.OracleDriver"; String url="jdbc:oracle:thin:@172.16.173.106:1521:TESTSTRUTS"; String user="test"; String password="test"; Class.forName(driver); Connection conn=DriverManager .getConnection(url,user,password); return conn; }
}
@Result(name = "success", type = "jasper", params={
"location","/WEB-INF/report/report5.jasper",
"format", "PDF",
"dataSource","mySource",
"reportKey","myfirstreport",
"exportParameters","param",

主要代码段是这个result type 是jasper

location 是编译后的jasper文件。入手途径1ireport编译后自动获得,2自己写一个compile获得(sturts2-jasperreport-plugin程序里有)

format 是输出格式 PDF HTML DOC EXCEL

dataSource 是数据源 也就是一个返回值是list的get属性

reportKey 是用来做HTML图片时做sessionkey用的

exportParameters 是报表report的param内容 也就是一个返回值是Map的get属性

然后是STRUTS.xml的配置 定义了jasper类型

    <package name="HulftPackage" extends="struts-default">
<result-types>
<result-type name="jasper" class="com.hulftchina.result.JasperReportsResult"/>
</result-types>
</package>

JasperReportsResult类就是struts plug抄过来的就是调用的地方重写了一下

因为jasper升级以后调用方式改变了所以这里重新写了一下,包括 数据库连接 自定义javabean和param的输入方式

@Override
protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception { initializeProperties(invocation); if (logger.isDebugEnabled()) {
logger.debug("Begin execute jasper report.");
} Map parameters= null; HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(ServletActionContext.HTTP_RESPONSE); // 设置http头
// 本地缓存1分钟
response.setHeader("CACHE-CONTROL", "PRIVATE");
response.setHeader("Cache-Control", "maxage=60");
response.setHeader("Pragma", "public");
// 完全接受后显示
response.setHeader("Accept-Ranges", "none"); // 文字设定
response.setCharacterEncoding("UTF-8"); // action内设定的连接取得
ValueStack stack = invocation.getStack();
Connection conn = (Connection) stack.findValue(connection); if (exportParameters != null) {
parameters = (Map) stack.findValue(exportParameters);
if (parameters != null) {
if (logger.isDebugEnabled()) {
logger.debug("Found export parameters; adding to exporter parameters...");
}
}
} //取得服务器绝对路径
ServletContext servletContext = (ServletContext) invocation.getInvocationContext().get(ServletActionContext.SERVLET_CONTEXT);
String systemId = servletContext.getRealPath(finalLocation); JasperPrint jasperPrint; try {
JasperReport jasperReport =
(JasperReport) JRLoader.loadObjectFromFile(systemId); ValueStackDataSource stackDataSource = null; // 数据库连接存在的时候
if (conn != null) {
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
} else if (dataSource != null) {
stackDataSource = new ValueStackDataSource(stack, dataSource, wrapField);
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, stackDataSource);
} else {
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters);
}
} catch (JRException e) {
logger.error("Error building report for uri " + systemId, e);
throw new ServletException(e.getMessage(), e);
} try { JRAbstractExporter exporter = null; ExporterConfiguration configuration = null; if (format.equals(FORMAT_PDF)) {
response.setContentType("application/pdf");
exporter = new JRPdfExporter();
configuration = new SimplePdfExporterConfiguration();
} else if (format.equals(FORMAT_HTML)) {
String sessionKey = null;
response.addHeader("Content-Type", "text/html");
exporter = new HtmlExporter();
configuration = new SimpleHtmlExporterConfiguration(); sessionKey = ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE; if (!StringUtils.isEmpty(reportKey)) {
sessionKey = ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE + reportKey;
}
request.getSession().setAttribute(sessionKey, jasperPrint); SimpleHtmlExporterOutput output = new SimpleHtmlExporterOutput(response.getOutputStream());
// img图片取得serverlet设定
output.setImageHandler(
new WebHtmlResourceHandler("reportimage?image={0}" +
(StringUtils.isEmpty(reportKey) ? "" : "&" + ImageServlet.JASPER_PRINT_REQUEST_PARAMETER + "=" + sessionKey)));
exporter.setExporterOutput(output);
} else if (format.equals(FORMAT_DOC)) {
response.addHeader("Content-Type", "application/msword");
exporter = new JRDocxExporter();
configuration = new SimpleDocxExporterConfiguration();
} else if (format.equals(FORMAT_XLS)) {
response.setContentType("application/vnd.ms-excel");
exporter = new JRXlsExporter();
configuration = new SimpleXlsExporterConfiguration();
} else {
throw new ServletException("Unknown report format: " + format);
} // 输入编译后的jasper的打印类
exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); if (!format.equals(FORMAT_HTML)) {
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(response.getOutputStream()));
}
exporter.setConfiguration(configuration); exporter.exportReport(); } catch (JRException e) {
String message = "Error producing " + format + " report for uri " + systemId;
logger.error(message, e);
throw new ServletException(e.getMessage(), e);
} catch (Exception e) {
String message = "Error producing " + format + " report for uri " + systemId;
logger.error(message, e);
throw new ServletException(e.getMessage(), e);
}
}

如果输出为html的话还需要在web.xml中加入 img取得的servlet这个是和上边代码中的("reportimage?image={0}"相呼应的

    <!-- 报表html版的图片取得 -->
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/reportimage</url-pattern>
</servlet-mapping>

这样基本的web版报表输出就ok了。

ireport5.6+jasperreport6.3开发(五)--以javabean为基准的报表开发(action关联)的更多相关文章

  1. ireport5.6+jasperreport6.3开发(三)--以javabean为基准的报表开发(javabean)

    这里只有ireport的开发没有web侧的程序. ireport的数据源可以说是多种多样,大致可以通过文件 数据库 bean类这三种方式,这里只介绍bean类 (数据库比较简单可参考其他的网站,文件没 ...

  2. ireport5.6+jasperreport6.3开发(四)--以javabean为基准的报表开发(ireport)

    javabean完成以后就是添加ireport的报表了 打开ireport的option然后在classpath中添加路径. 然后在ireport中追加数据源如图,点击图标后会出现数据源列表然后按ne ...

  3. 开发一个App要多少钱?APP开发报价单,APP开发外包有哪些注意事项-广州达到信息www.ddapp.com.cn

    来源:广州达到信息著作权归广州达到信息所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作为一个APP开发从业者,经常会有人问到:开发一个App要多少钱?下面针对这个问题来好好解答解答正经的谈 ...

  4. ActiveReport系列报表开发随笔收集

    转自:博客园 http://www.cnblogs.com/dahuzizyd/archive/2007/04/11/ActiveReport_All.html 使用ActiveReport for ...

  5. ireport5.6+jasperreport6.3开发(二)--web开发的配置

    ireport5.6只能编译出*.jasper的报表包,最终报表需要被输出为一个doc html pdf excel等文件,这时就需要jasperreport6.5的库进行配合了. jasperrep ...

  6. 2017.10.26 JavaWeb----第五章 JavaBean技术

    JavaWeb----第五章 JavaBean技术 (1)JavaBean技术 JavaBean技术是javaweb程序的重要组成部分,是一个可重复使用的软件组件,是用Java语言编写的.遵循一定的标 ...

  7. 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级

    标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...

  8. 五分钟完成 ABP vNext 通讯录 App 开发

    五分钟完成 ABP vNext 通讯录 App 开发 ABP vNext(后文简称Abp)是 Volo 公司堪称艺术品级的应用开发框架,它基于领域驱动设计(DDD)的思维,创新地采用了模块化的设计.A ...

  9. STC8H开发(五): SPI驱动nRF24L01无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

随机推荐

  1. Hadoop:部署Hadoop Single Node

    一.环境准备 1.系统环境 CentOS 7 2.软件环境 OpenJDK # 查询可安装的OpenJDK软件包[root@server1] yum search java | grep jdk... ...

  2. Caffe + Ubuntu 14.04 64bit + 无CUDA(linux下安装caffe(无cuda)以及python接口)

    安装Caffe指导书 环境: Linux 64位 显卡为Intel + AMD,非英伟达显卡 无GPU 一. 安装准备工作 1. 以管理员身份登录 在左上角点击图标,搜索terminal(即终端),以 ...

  3. 关于Union 中 ORA-12704:字符集不匹配问题的解决

    在使用Union all连接时,若A集合中某列为nvarchar2或nvarchar类型,而B集合中无此列,用‘ ’ 来代替是会报字符集不匹配,解决方法有两种,见下面的示例 有问题的SQL: sele ...

  4. Entity Framework7 有哪些不同?之具体功能

    Entity Framework7 有哪些不同?之具体功能 前面我们介绍了关于EF7的新特性.开发计划和入门介绍.今天,我们来看看EF7的具体新功能及用法.本文中的环境,为EF7入门里介绍的环境. 1 ...

  5. Python实现冒泡排序

    array = [1,2,3,6,5,4] for i in range(len(array)): for j in range(i): if array[j] > array[j + 1]: ...

  6. World Wind .NET源码编译问题处理

    World  Wind  .NET源码编译问题处理 下载了World_Wind_1.4.0_Source源码(http://worldwindcentral.com/wiki/NASA_World_W ...

  7. web应用安全防御100技 好书再次阅读, 变的只是表象,被概念迷惑的时候还是静下心来回顾本质

    如何进行web应用安全防御,是每个web安全从业者都会被问到的问题,非常不好回答,容易过于肤浅或流于理论,要阐明清楚,答案就是一本书的长度.而本文要介绍一本能很好回答这个问题的优秀书籍——<we ...

  8. Mysql的基础使用之MariaDB安装

    初学mysql的小白,首次写博客,为了能让自己记得更加深刻,也是以一种小白的角度交代初学者的经历和困难,也算是记录自己成长的步伐吧 我首次用mysql是在ubuntu上 ,现在用的是linux 中的R ...

  9. 从零开始调用一个手机号归属地查询API

    自从过上程序员的生活,身边总是或多或少的提及一些API(应用程序接口),网上各种入门教程.实例大把大把,有的只是贴上部分代码,也不给注释, 写Demo的时候连编译都无法通过.下面我从小白开始来介绍下调 ...

  10. Java程序的编码规范

    所有的程序开发手册都包含了各种规则.一些习惯自由程序人员可能对这些规则很不适应,但是在多个开发人员共同写作的情况下,这些规则是必需的.这不仅仅是为了开发效率来考虑,而且也是为了后期维护考虑. 一.命名 ...