后台获取参数模板的参数

一些客户在使用集智平台报表的过程中,参数的要求比较复杂,所以需要在参数模板中填入参数后在jsp里获取到参数模板中,以便自行在后台进行一定的处理,然后再传给报表进行计算和使用,下面就介绍一下如何在jsp中获取到参数模板中传递过来的参数,并且在后台打印出来。

第一步:制作一张参数模板。

制作一张参数模板,参数模板的样式可以根据自己的需要随意制作,这里采用如下图的参数模板:

其中B1D1单元格的变量名分别为arg1arg2B1D1都为编辑框,保存这张参数模板为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>

保存这个jsptest.jsp

第四步:用test.jsp发布报表。

test.jsp发布报表,然后点击查询按钮,可以看到参数被传递给主报表了。具体的效果如下:

这时查看后台就会发现参数被打印出来了,其中的action=8是润乾封装好的servlet,所以也被打印出来了,而arg1arg2则是参数模板中的参数,具体效果如下图所示:

这样后台获取参数模板参数的需求就实现了。