后台获取参数模板的参数
一些客户在使用集智平台的报表的过程中,参数的要求比较复杂,所以需要在参数模板中填入参数后在jsp里获取到参数模板中,以便自行在后台进行一定的处理,然后再传给报表进行计算和使用,下面就介绍一下如何在jsp中获取到参数模板中传递过来的参数,并且在后台打印出来。
第一步:制作一张参数模板。
制作一张参数模板,参数模板的样式可以根据自己的需要随意制作,这里采用如下图的参数模板:
其中B1和D1单元格的变量名分别为arg1和arg2,B1和D1都为编辑框,保存这张参数模板为report_arg.raq。
第二步:制作一张主报表。
制作一张主报表,接收参数模板的参数,主报表的样式如下图所示:
保存这张报表为report.raq。
第三步:编写发布报表的jsp。
润乾报表在点击查询按钮以后,程序会把参数模板中的参数放到参数池中,要用HashTable的方式从参数池中取得这些参数,取得这些参数的代码如下图所示:
request.setCharacterEncoding( “GBK” );
StringBuffer param1=new StringBuffer();
String reportParamsId=request.getParameter(“reportParamsId”);
Hashtable paramtest = null;
if(!”".equals(reportParamsId) && reportParamsId != null){
paramtest = com.runqian.report4.view.ParamsPool.get( reportParamsId ); //从参数池中取得参数
Set<String> set = paramtest.keySet();
List<String> list = new ArrayList<String>();
for(String key : set){
list.add(key);
}//把参数池中的参数放到list中
for(int i=0;i<list.size(); i++){
System.out.println(list.get(i));
String paramName = list.get(i);
String paramValue=(String)paramtest.get(paramName);
if(paramValue!=null){
param1.append(paramName).append(“=”).append(paramValue).append(“;”);
}//从list中取出参数名和参数值,拼成一个字符串
}
}
System.out.println(param1);
完整的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.usermodel.Context”%>
<html>
<body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>
<%
request.setCharacterEncoding( “GBK” );
StringBuffer param1=new StringBuffer();
String reportParamsId=request.getParameter(“reportParamsId”);
Hashtable paramtest = null;
if(!”".equals(reportParamsId) && reportParamsId != null){
paramtest = com.runqian.report4.view.ParamsPool.get( reportParamsId );
Set<String> set = paramtest.keySet();
List<String> list = new ArrayList<String>();
for(String key : set){
list.add(key);
}
for(int i=0;i<list.size(); i++){
System.out.println(list.get(i));
String paramName = list.get(i);
String paramValue=(String)paramtest.get(paramName);
if(paramValue!=null){
param1.append(paramName).append(“=”).append(paramValue).append(“;”);
}
}
}
System.out.println(param1);
%>
<jsp:include page=”toolbar.jsp” flush=”false” />
<table id=”param_tbl” width=”100%” height=”100%”><tr><td>
<report:param name=”form1″ paramFileName=”report_arg.raq”
needSubmit=”no”
/>
</td>
<td><a href=”javascript:_submit( form1 )”><img src=”../images/query.jpg” border=no style=”vertical-align:middle”></a></td>
</tr></table>
<table align=”center” width=”100%” height=”100%”>
<tr><td>
<report:html name=”report1″ reportFileName=”report.raq”
funcBarLocation=”top”
needPageMark=”yes”
generateParamForm=”no”
params=”<%=param1.toString()%>”
exceptionPage=”/reportJsp/myError2.jsp”
/>
</td></tr>
</table>
</body>
</html>
保存这个jsp为test.jsp。
第四步:用test.jsp发布报表。
用test.jsp发布报表,然后点击查询按钮,可以看到参数被传递给主报表了。具体的效果如下:
这时查看后台就会发现参数被打印出来了,其中的action=8是润乾封装好的servlet,所以也被打印出来了,而arg1和arg2则是参数模板中的参数,具体效果如下图所示:
这样后台获取参数模板参数的需求就实现了。