润乾报表分页遇到的问题

环境: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文件是否有中文在这里没有关系

原文地址:https://www.cnblogs.com/javac/p/2683626.html