参数模板和结果模板分开展现的通用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”); 
 }