页面不同参数展现不同的报表

最近的工作中遇到了一个需求,具体的描述是:客户想通过在页面上输入不同的参数,让页面展示不同的报表,也就是说通过不同参数动态控制页面展示哪张报表。

 

实现思路:通过获取给参数模板中的参数值,按逻辑判断需要展示哪张报表,然后给标签传递要展现的报表的名字即可。

实现过程:

第一步:制作三张需要展现的报表。

制作三张简单的报表,三张报表的样式都很简单,这里直接从初级教程里面选取三张表,都是连接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

这样在页面上输入不同的参数,让页面展示不同的报表的功能就实现了。

热门文章