知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 知识库 > 设计基础 > 带参数模板的折叠报表实现

带参数模板的折叠报表实现

         关于快逸折叠报表的实现已经有相关文章或例子进行过介绍,本文将在原有折叠报表的基础上,实现带有参数模板的折叠报表。


实现难点


         我们原来制作的折叠报表是使用超链接传参数控制隐藏行实现的,每次要传递的参数放到form中保存,通过request传递给报表。


         而参数模板的查询会跳转到servlet进行处理,其间会将原来放到request中的内容(参数和参数值等)一直保存,servlet处理后将request中的内容输出到url中,而且url不再变化,直到进行下一次查询。


         这就导致了当通过参数模板查询数据后,再点击折叠报表必要的参数就无法通过request传递给报表了。


         所以必须想办法将要传递的参数拼到现有不变的url中,可以先获取到现有的url,将需要传递的参数拼接到其中,然后再将拼好的串返回到url中。


实现步骤


         通过超链接隐藏行做一张带有参数模板的折叠报表,发布后,点击查询可以看到折叠报表无法正常展开了。


         我们来修改一下发布报表的jspjs部分:


//获得当前浏览器url


       var url = window.location.href;


       var new_url;


 


       //判断


       if(url.indexOf(“show_groups=”)<0){//url中不包含show_groups字样,说明报表无展开


           frm.submit();//此时不改变url,使用原有方式提交表单


       }else{//url中包含show_groups字样,说明折叠报表有部分展开并进行了参数查询


           new_url = url.substr(0,url.indexOf(“show_groups=”)+12)+groups+url.substr(url.indexOf(“&context_name=”),url.length);//拼接url


           window.location.href=new_url;//将修改后url串返回浏览器,不进行表单提交


       }


 


重新访问该报表,可以看到报表查询后可以正常展开折叠



 


部分主要代码:


<%    


   request.setCharacterEncoding( “GBK” );


    Exception exp = null;


    Context ctx = null;


    String contextName = request.getParameter(“context_name”);


    String raqFile = request.getParameter(“raq”);


    String showGroups = “”;


 


    session.setMaxInactiveInterval(-1);


   


    try{


       if(raqFile==null || “”.equals(raqFile)) throw new Exception(未指定报表模版名!);


       // 没有context_name参数,说明页面第一次被访问,构建一个context


       if(contextName==null || “”.equals(contextName)){


           // 读取报表模版


           ReportDefine rd = (ReportDefine)ReportUtils.read(application.getResourceAsStream(Context.getMainDir()+“/”+raqFile));


           ctx = new Context();


           // 因为要将context存在session中,所以名称最好加上一些随机值,此处省略


           contextName = “report_context”;


       }


       else{


           ctx = (Context)session.getAttribute(contextName);


           if(ctx==nullthrow new Exception(找不到Context);


 


           // 如果是数组参数,传入context 要用ArrayList


           showGroups = request.getParameter(“show_groups”);


           String gs[] = showGroups.split(“,”);


           ArrayList al = new ArrayList();


           for(int i=0;i<gs.length;i++) al.add(gs[i]);


           ctx.setParamValue(“show_groups”,al);


       }


       // 保存到session中,供下次使用


       session.setAttribute(contextName,ctx);


       // 保存到request中,传给报表


       request.setAttribute(contextName,ctx);


    }


    catch(Exception e){


       exp = e;


       e.printStackTrace();


    }


%>


<html>


<head>


<title>折叠报表例子2</title>


<script language=“javascript”>


    // 参数是要折叠/展开的组名


    function _changeShowGroup(group){


       //alert(“B10内容:“+group);


       var frm = document.tree_params;


       var groups = frm.show_groups.value;


       //alert(“frm.show_groups->”+groups);


       // 重新组装参数


       var isInGroup = false;


       var gs = groups.split(“,”);


       groups = “”;


       for(var i=0;i<gs.length;i++){


           if(gs[i]!=group)


              groups += gs[i]+“,”;


           else


              isInGroup = true;


       }


       if(!isInGroup) groups += group;


       // 清除首尾多余的逗号


       while(groups.substr(groups.length-1,1)==“,”) groups = groups.substring(0,groups.length-1);


       while(groups.substr(0,1)==“,”) groups = groups.substring(1,groups.length);


       //alert(“处理后groups:”+groups)


       // 填值,提交


       frm.show_groups.value = groups;


      


       //获得当前浏览器url


       var url = window.location.href;


       var new_url;


 


       //判断


       if(url.indexOf(“show_groups=”)<0){//url中不包含show_groups字样,说明报表无展开


           frm.submit();//此时不改变url,使用原有方式提交表单


       }else{//url中包含show_groups字样,说明折叠报表有部分展开并进行了参数查询


           new_url = url.substr(0,url.indexOf(“show_groups=”)+12)+groups+url.substr(url.indexOf(“&context_name=”),url.length);//拼接url


           window.location.href=new_url;//将修改后url串返回浏览器,不进行表单提交


       }


 


       //alert(“放到form里的groups:”+frm.show_groups.value);


       //frm.submit();


    }


</script>


</head>


<body>


<form name=“tree_params” action=“” method=“post”>


    <input type=“hidden” name=“context_name” value=<%=contextName %>>


    <input type=“hidden” name=“show_groups” value=<%=showGroups %>>

</form>

本文标签:
发布日期:2011/08/15
本文分类: 设计基础