Monday, February 22, 2010

Jasper Reports with pagination

Jasper Reports with pagination

I have added one more concept of adding pagination to Jasper Reports.
Adding pagination functionality to the jasper reports is very simple.
It has few steps to get it .
Have a look.
Following example is very simple.We can modify it as well for good UI.




IN MY jsp (reportview.jsp)
------------------------------
<% JRHtmlExporter export = (JRHtmlExporter)request.getAttribute("exportIndentObject"); session.setAttribute("exportIndentObject", export); JRHtmlExporter export1=(JRHtmlExporter)session.getAttribute("exportIndentObject"); Integer st1 = (Integer) request.getAttribute("repoprt.size"); %>
<head>
<script language="javascript">
var value=0;
function showpageview(val)
{

value=val;
var len=<%=st1%>;
if(val>=len){
value=len-1;
alert("No more pages");
} else if (val<0){
value=0;
alert("No Previous pages");
}else{
showPage(val);
}
}

function showPage(val)
{

xmlhttp = false;
if (window.XMLHttpRequest) {// code for Firefox, Opera, IE7, etc.
xmlhttp=new XMLHttpRequest();
} else if (window.ActiveXObject) {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
/* ========== AJAX Initializtion ========== */

if (xmlhttp!=null) {
url="<%=request.getContextPath()%>/report/view?pageNo="+val;
xmlhttp.onreadystatechange= function () { getReport(xmlhttp); };
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Cache-Control","no-cache, private, max-age=0");
xmlhttp.send(null);

} else {
alert("Your browser does not support XMLHTTP.");
}

}
function getReport(httpRequest1)
{
if(httpRequest1.readyState==4)
{
if(httpRequest1.status==200)
{
var result = httpRequest1.responseText;
document.getElementById("reportdiv").innerHTML=result;
}
}

}
</script>

</head>
<body onLoad="showPage(0)">
<html:form action="/export/action">
<%
Integer st = (Integer) request.getAttribute("repoprt.size");

if (st > 0) {
%>
<table>
<tr>
<td colspan="3">
<select id="exportName" name="exportName" class="select_box" >
<option value="PDF">PDF</option>
<option value="EXCEL">EXCEL</option>
<option value="TEXT">TEXT</option>
</select>

<html:submit value="Export" styleClass="button_submit"/>


<input type="button" class="button_submit" value="print" onClick="javascript:print();"/>

</td>
</tr>
<tr><td colspan="3" align="center">

<div id="reportdiv" style="display:block"></div>
</td> </tr>
</table>

<table width="100%" border="0" cellspacing="0" cellpadding="0" id="pagintable3">
<tr>

<td width="17%" height="35" align="right" class="extreme"><a href="javascript:showpageview(value-1)"><b>< Prev</b> </a></td>
<td width="17%" align="left" class="extreme"><a href="javascript:showpageview(value+1)"> <b>Next ></b></a> </td>
</tr>
</table>



<%} else {
%>
<div class="warn"> <h3>No Records Found</h3></div>

<% }
%>
</html:form>


</body>

In my Struts-Config file
----------------------------

<action
path="/report/view"
name="IndentReportForm"
type="com.jsperReports.ReportViewAction">
<forward name="success" path="reports.view"/>
<forward name="success1" path="/WEB-INF/jsp/jasperReports/reportshow.jsp"/>
</action>


In my struts Action class(ReportViewAction.java)
--------------------------------------------------

String pg=request.getParameter("pageNo");
if(pg!=null)
{
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.PAGE_INDEX, new Integer(pg));
HashMap fontMap = new HashMap();
exporter.setParameter(JRHtmlExporterParameter.FONT_MAP, fontMap);
exporter.setParameter(JRHtmlExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
exporter.setParameter(JRHtmlExporterParameter.IS_WRAP_BREAK_WORD,Boolean.TRUE);
JasperExportManager.exportReportToHtmlFile(jasperPrint,request.getRealPath("/reports") + "/" + "Report.html");
request.setAttribute("exportPrintObject", exporter);
List sizeList=(ArrayList)jasperPrint.getPages();
Integer repoerSize=sizeList.size();
if(repoerSize==0){
request.setAttribute("repoprt.size",repoerSize);
map="success1";
}
try{
//closing connection
SDB.close(con);
}catch(Exception e){e.printStackTrace();}



In my reportshow.jsp
---------------------
<% JRHtmlExporter export = (JRHtmlExporter) request.getAttribute("exportPrintObject"); export.exportReport(); %>


See the following screen shot(We can do modification as we require)




4 comments:

  1. Offshore Outsourcing Software Development Company Etisbew - We have got a great information on your blog, please keep posting such information in future.

    ReplyDelete
  2. hai, i need to change table header value, only i want to change height not width... i changed height but value is overlapping...Is any property "Allow struts is true"..where to set?

    ReplyDelete
  3. can anyone send me the complete application @ keleti.santhosh@gmail.com

    ReplyDelete