参数模板和结果模板分开展现的通用jsp
报表查询的参数模板和查询结果模板的分开展现是客户的常见需求,下面提供通用的参数模板和报表模板分开展现的通用jsp页面。
方法一:
实现思路:showParamsReport.jsp为参数模板展现模板,showResultReport.jsp为结果页面展现页面。通过形如http://127.0.0.1:6001/demo/reportJsp/showParamsReport.jsp?raq=/4.4.raq展现参数模板4.4_arg.raq,如下图:
查询结果跳转至http://127.0.0.1:6001/demo/reportJsp/showResultReport.jsp?raq=/4.4.raq展示报表结果查询结果,如下图。
具体实现:
1.在showParamsReport.jsp中,只包含<html:param>标签,用来展示参数raq指定的报表模板对应的参数模板,并利用<html:param>标签的属性resultPage指定提交参数后的报表结果页面。部分代码如下:
<%
request.setCharacterEncoding( “GBK” );
//接收报表模板参数raq
String report = new String(request.getParameter(“raq”).getBytes(“gb2312″),”GBK”);
String reportFileHome=Context.getInitCtx().getMainDir();
StringBuffer param=new StringBuffer();
//指定报表跳转页面
String resultpage=”/reportJsp/showResultReport.jsp?raq=”+report;
//保证报表名称的完整性
int iTmp = 0;
if( (iTmp = report.lastIndexOf(“.raq”)) <= 0 ){
report = report + “.raq”;
iTmp = 0;
//获得相应的参数模板名称
String paramFile = report.substring(0,iTmp)+”_arg.raq”;
%>
<table align=center >
<TR><TD align=center>
<!– 使用参数模板方式来展现参数表单,注意resultPage的指定 –>
<report:param name=”form1″ paramFileName=”<%=paramFile%>” needSubmit=”no” resultPage=”<%=resultpage%>“/>
</TD> </TR>
<tr><td align=center><input type=”button” class=”btn” onClick=”javascript:_submit( form1 )” name=”submit” value=”确 定”/> <input class=”btn” type=”button” onClick=”javascript:form1.reset();” name=”reset” value=”重 置”/></td></tr>
</table>
</body>
</html>
2.showResultReport.jsp,接收参数模板参数,并根据指定的报表名进行报表运算展现。修改标准的showReport.jsp去掉参数模板展现标签,代码略。
此方法存在问题,在<html:param>的resultPage属性中如果包含了中文会出现参数传递乱码,比如http://127.0.0.1:6001/demo/reportJsp/showParamsReport.jsp?raq=/初级教程/4.4.raq展现参数页面,点击查询后跳转至结果页面会报: 读报表文件失败:/鍒濈骇鏁欑▼/4.4.raq 错误来源:报表文件/reportFiles/鍒濈骇鏁欑▼/4.4.raq不存在。
针对以上情况可采用方法二,来避免此问题。
方法二:
实现思路:在showParamsReport.jsp其中利用<html:param>的hiddenParams属性可保存参数时期可以在参数缓冲池中保存,这样可以避免在resultPage属性中传递含有中文路径或中文报表名的参数。在showResultReport.jsp通过参数缓存的标识号获得缓冲池的参数,并获取参数名为raq的参数值,作为<html:report>标签中的报表文件名。
通过形如http://127.0.0.1:6001/demo/reportJsp/showParamsReport.jsp?raq=/初级教程/4.4.raq展现参数模板4.4_arg.raq, 查询结果跳转至http://127.0.0.1:6001/demo/reportJsp/showResultReport.jsp?reportParamsId=100006展示报表结果查询结果,该方法不会出现报表名含中文时的异常。
具体实现:
1. 在showParamsReport.jsp中, <html:param>标签中的resultPage为报表结果页面(不带参数/reportJsp/showResultReport.jsp) hiddrenParams保存传入的raq参数,这样可以将该参数保存在参数缓存池中。
部分代码如下:
<%
request.setCharacterEncoding( “GBK” );
String report = new String(request.getParameter(“raq”).getBytes(“gb2312″),”GBK”);
//隐藏参数的指定
String hiddenParams=”raq=”+report;
String reportFileHome=Context.getInitCtx().getMainDir();
StringBuffer param=new StringBuffer();
//指定结果页面,不带参数
String resultpage=”/reportJsp/showResultReport.jsp”;
//保证报表名称的完整性
int iTmp = 0;
if( (iTmp = report.lastIndexOf(“.raq”)) <= 0 ){
report = report + “.raq”;
iTmp = 0;
//得到对应的参数模板
String paramFile = report.substring(0,iTmp)+”_arg.raq”;
%>
<table align=center >
<TR><TD align=center>
<!– 使用参数模板方式来展现参数表单,注意hiddenParams和resultPage的使用 –> <report:param name=”form1″ paramFileName=”<%=paramFile%>” hiddenParams=”<%=hiddenParams%>” needSubmit=”no” resultPage=”<%=resultpage%>”/>
</TD> </TR>
<tr><td align=center><input type=”button” class=”btn” onClick=”javascript:_submit( form1 )” name=”submit” value=”确 定”/> <input class=”btn” type=”button” onClick=”javascript:form1.reset();” name=”reset” value=”重 置”/></td></tr>
</table>
</body>
</html>
2. 在showResultPage.jsp中,通过参数缓存标识号得到名为raq的参数,并赋值给report,将其作为<html:report>标签中的报表文件名,参数获取部分实现代码如下:
String reportParamsId = request.getParameter(“reportParamsId”); //取得参数缓存的标识号
String report = null;
if(reportParamsId!=null){
Hashtable params = null;
if(!”".equals(reportParamsId) && reportParamsId != null){
params = com.runqian.report4.view.ParamsPool.get( reportParamsId );
}
//获得参数值赋值给report
report = (String) params.get(“raq”);
}