页面不同参数展现不同的报表
最近的工作中遇到了一个需求,具体的描述是:客户想通过在页面上输入不同的参数,让页面展示不同的报表,也就是说通过不同参数动态控制页面展示哪张报表。
实现思路:通过获取给参数模板中的参数值,按逻辑判断需要展示哪张报表,然后给标签传递要展现的报表的名字即可。
实现过程:
第一步:制作三张需要展现的报表。
制作三张简单的报表,三张报表的样式都很简单,这里直接从初级教程里面选取三张表,都是连接demo数据源的,三张表的样式分别如下面的三幅图所示:
三张报表之一
三张报表之二
三张报表之三
第二步:设计一张参数模板。
设计一张参数模板,根据客户对参数模板的填写情况来动态判断展示哪张报表。
例子中的规则为:如果参数1和参数2不为空,参数3和参数4为空,那么显示report1.raq
如果参数1和参数2为空,参数3和参数4不为空,那么显示report2.raq
其他情况和默认都显示report3.raq
参数模板的样式如下图所示:
第三步:编写展现报表的jsp
在jsp中根据参数的值不同动态的给reportFileName标签传递参数值,而参数模板中四个参数值的获取方法如下:
String reportParamsId=request.getParameter(“reportParamsId”);
Hashtable params = null;
if(!”".equals(reportParamsId) && reportParamsId != null){
params = com.runqian.report4.view.ParamsPool.get( reportParamsId );
String value1 =(String) params.get(“arg1″);
String value2 =(String) params.get(“arg2″);
String value3 =(String) params.get(“arg3″);
String value4 =(String) params.get(“arg4″);
然后根据上面提到的逻辑写if表达式判断该给报表传递什么样的参数,具体的写法如下:
if((value1!=null&&!”".equals(value1))&&(value2!=null&&!”".equals(value2))&&(value3==null||”".equals(value3))&&(value4==null||”".equals(value4))){
raq=”report1.raq”;
}else
if((value4!=null&&!”".equals(value4))&&(value3!=null&&!”".equals(value3))&&(value2==null||”".equals(value2))&&(value1==null||”".equals(value1))){
raq=”report2.raq”;
} else{
raq=”report3.raq”;
}
}
最后完整的jsp代码如下:
<%@ page contentType=”text/html;charset=GBK” %>
<%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %>
<%@ page import=”java.io.*”%>
<%@ page import=”java.util.*”%>
<%@ page import=”com.runqian.report4.view.*”%>
<report:param name=”form1″ paramFileName=”/report_arg.raq” /> //指定参数模板
<%
String reportParamsId=request.getParameter(“reportParamsId”);
String raq = “report3.raq”;
Hashtable params = null;
if(!”".equals(reportParamsId) && reportParamsId != null){
params = com.runqian.report4.view.ParamsPool.get( reportParamsId );
String value1 =(String) params.get(“arg1″);
String value2 =(String) params.get(“arg2″);
String value3 =(String) params.get(“arg3″);
String value4 =(String) params.get(“arg4″);
if((value1!=null&&!”".equals(value1))&&(value2!=null&&!”".equals(value2))&&(value3==null||”".equals(value3))&&(value4==null||”".equals(value4))){
raq=”report1.raq”;
}else
if((value4!=null&&!”".equals(value4))&&(value3!=null&&!”".equals(value3))&&(value2==null||”".equals(value2))&&(value1==null||”".equals(value1))){
raq=”report2.raq”;
} else{
raq=”report3.raq”;
}
}
%>
<report:html name=”report1″ reportFileName=”<%=raq%>”//动态传参
needSaveAsWord=”yes”
needSaveAsPdf=”yes”
needSaveAsExcel=”yes”
/>
用上面的jsp代码发布报表,即可看到如下图的效果,在参数默认为空的时候展现的是报表report3.raq
然后给参数1和参数2随便输入两个值,参数3和参数4为空,点击查询按钮,可以看到如下图的效果,展现的是report1.raq
然后给参数3和参数4随便输入两个值,参数1和参数2为空,点击查询按钮,可以看到如下图的效果,展现的是report2.raq
这样在页面上输入不同的参数,让页面展示不同的报表的功能就实现了。