环境:java+tomcat+struts2+spring+hibernate
逻辑:点击查询的时候,会访问后台的一个方法getRunqianPara,返回润乾文件名和参数params,跳转到data-statistic-launch-runqian.jsp
问题:在页面data-statistic-launch-runqian.jsp中能正常显示润乾报表,但是点击"下一页"的图标按钮的时候报错,报错页面如下:
我的data-statistic-launch-runqian.jsp页面代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib uri="http://www.cnblogs.com/runqian/runqianReport4.tld" prefix="runqian" %> 4 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <% 7 String appmap = request.getContextPath(); 8 String firstPageImage = "<img src='" 9 + appmap 10 + "/style1/images/firstpage.gif' border=no style='vertical-align:middle'>"; 11 String lastPageImage = "<img src='" 12 + appmap 13 + "/style1/images/lastpage.gif' border=no style='vertical-align:middle'>"; 14 String nextPageImage = "<img src='" 15 + appmap 16 + "/style1/images/nextpage.gif' border=no style='vertical-align:middle'>"; 17 String prevPageImage = "<img src='" 18 + appmap 19 + "/style1/images/prevpage.gif' border=no style='vertical-align:middle'>"; 20 String printImage = "<img src='" 21 + appmap 22 + "/style1/images/rq_print.gif' border=no style='vertical-align:middle'>"; 23 String excelImage = "<img src='" 24 + appmap 25 + "/style1/images/excel.gif' border=no style='vertical-align:middle'>"; 26 String pdfImage = "<img src='" + appmap 27 + "/style1/images/pdf.gif' border=no style='vertical-align:middle'>"; 28 %> 29 <runqian:html name="report" reportFileName="${modelName}" 30 funcBarLocation="bottom" params="${params}" needPrint="yes" 31 needScroll="no" 32 needOfflineInput="yes" needSaveAsExcel="yes" 33 needImportExcel="yes" needSaveAsPdf="yes" generateParamForm="no" 34 exceptionPage="/index/reportError.ftl" needPageMark="yes" 35 pageMarkLabel="页号{currpage}/{totalPage}" displayNoLinkPageMark="yes" width="-1" 36 firstPageLabel="<%=firstPageImage%>" 37 prevPageLabel="<%=prevPageImage%>" 38 nextPageLabel="<%=nextPageImage%>" 39 lastPageLabel="<%=lastPageImage%>" 40 printLabel="<%=printImage%>" 41 excelLabel="<%=excelImage%>" 42 pdfLabel="<%=pdfImage%>"/>
在网上找了一大圈,找到博主“薄荷红茶”的这个文章http://starbhhc.iteye.com/blog/1544122,文章中前两步,我都是这样做的,第三步没看懂。
后来这样分析:
在data-statistic-launch-runqian.jsp页面中,将鼠标放在下一页的图标上,IE的左下角会出现链接地址
这时发现和会访问后台的链接是一样的
通过IE的debug看,找到脚本,选择对应的页面
会看到这样的代码:
1 <script language=javascript> 2 function report_toPage( pageNo ) { 3 if( pageNo < 1 || pageNo > report_getTotalPage() ) return; 4 document.report_turnPageForm.report_currPage.value = pageNo; 5 document.report_turnPageForm.submit(); 6 } 7 </script>
还有这个:
1 <form name="report_turnPageForm" method=post action="http://localhost:8080/omms-web/WEB-INF/content/transmission/data-statistic-launch-runqian.jsp?t_i_m_e=1347517433155" style="display:none">
这时候想到了博主“薄荷红茶”的文章中说的内容的第三点了。
其实点击“下一页”按钮图标的时候,默认是对form的递交,而form的action默认是data-statistic-launch-runqian.jsp页面(也就是自身页面)
如果你的params参数是在jsp页面中拼接的,则不用修改action地址,如果是后台传过来的,那么你需要修改action
解决方法:
用js修改form的action为访问后台的地址,例如我这里是在data-statistic-launch-runqian.jsp页面最后一行添加以下代码:
<script type="text/javascript"> document.report_turnPageForm.action="<%=request.getContextPath()%>/transmission/data-statistic-launch!getRunqianPara.action"; </script>
其实这一步就是博主“薄荷红茶”的文章中说的内容的第三点
注意:
①如果你使用的是iframe,有时会因为缓存的原因没看出页面发生变化,最好采取清除缓存措施
②润乾报表的raq文件是否有中文在这里没有关系