jsp pagination jstl

Resultados sabios de la página que se muestran en la página jsp



pagination jstl (1)

Tengo una página de Búsqueda JSP que aceptará algunos campos de entrada y enviará una consulta a la base de datos con los respectivos campos respectivos. si hay 2000 registros relevantes en la base de datos, la página mostrará los primeros 30 resultados y un próximo botón para mostrar los resultados posteriores o el botón anterior para los resultados anteriores, al igual que cuando buscamos en Google. Ahora mi problema es que no tengo ni idea de cómo hacer estas cosas. Sé básico de servlets, JSP, JDBC. ¿Hay alguien que resuelva este problema? sugerencias e ideas son muy apreciadas. el código será así

<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ page import = "com.preva.vo.StoppageDetails"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="css/cal.css" rel="stylesheet" type="text/css" /> <link href="css/sty.css" rel="stylesheet" type="text/css" /> <link href="css/tabborder.css" rel="stylesheet" type="text/css" /> </head> <body> <jsp:include page="Header.jsp" /> <table align=center border=0 cellspacing=0 cellpadding=0> <tr ><td colSpan=5 align=center><b>Overspeed Details</b></td></tr> <tr > <td colspan=5 align=center> <b><%=request.getParameter("vehicleId") %></b></td></tr> <tr><td>From &nbsp; <%=session.getAttribute("fromdate") %> &nbsp;to&nbsp; <%=session.getAttribute("startdate") %></td></tr> </table><br></br> <table class=''rptTbl_sortable'' width=''80%'' align=center cellspacing=''2'' cellpadding=''0'' border=''0''> <thead> <tr class="rptHdrRow"> <th id="index" class="rptHdrCol_sort" nowrap>DeviceID</th> <th id="date" class="rptHdrCol_sort" nowrap>Date</th> <th id="time" class="rptHdrCol_sort" nowrap>Speed</th> <th id="statusdesc" class="rptHdrCol_sort" nowrap>Status</th> <th id="address" class="rptHdrCol_sort" nowrap>Address</th> </tr> </thead> <tbody> <c:forEach items="${sessionScope.overspeeddetails}" var="overspeeddetailsvar"> <tr class="rptBodyRowOdd"> <td><c:out value="${overspeeddetailsvar.deviceID}"></c:out></td> <td><c:out value="${overspeeddetailsvar.TIMESTAMP}"></c:out></td> <td><c:out value="${overspeeddetailsvar.speed}"></c:out></td> <td><c:out value="${overspeeddetailsvar.statuscode}"></c:out></td> <td><c:out value="${overspeeddetailsvar.address}"></c:out></td> </tr> <tr class="rptBodyRowEven"> <td><c:out value="${overspeeddetailsvar.deviceID}"> </c:out> </td> <td><c:out value="${overspeeddetailsvar.TIMESTAMP}"></c:out></td> <td> <c:out value="${overspeeddetailsvar.speed}"></c:out></td> <td><c:out value="${overspeeddetailsvar.statuscode}"></c:out></td> <td><c:out value="${overspeeddetailsvar.address}"></c:out></td> </tr> </c:forEach> </tbody> </table> </body> </html>

las clases de frijol y Dao serán así

public class OverspeedDetails { private String deviceID,timestamp,statuscode,address; private double speed; public double getSpeed() { return speed; } public void setSpeed(double speed) { this.speed = speed; } public String getDeviceID() { return deviceID; } public void setDeviceID(String deviceID) { this.deviceID = deviceID; } public String getTIMESTAMP() { return timestamp; } public void setTIMESTAMP(String TIMESTAMP) { this.timestamp = TIMESTAMP; } public String getStatuscode() { return statuscode; } public void setStatuscode(String statuscode) { this.statuscode = statuscode; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public List<OverspeedDetails> getosDetails(String accountID,String deviceID,String Timestamp1,String Timestamp2,double speed) { Connection con=null; List<OverspeedDetails> overspeeddetail = new ArrayList<OverspeedDetails>(); try{ con= DBConnectionFactory.getDBConnection(); String sql="SELECT deviceID,TIMESTAMP,speedKPH,statuscode,address FROM eventdata WHERE (TIMESTAMP BETWEEN ''"+Timestamp1+"'' AND ''"+Timestamp2+"'') AND accountID=''"+accountID+"'' AND deviceID=''"+deviceID+"''and speedKPH >"+speed+";"; Statement st=con.createStatement(); ResultSet rs=st.executeQuery(sql); System.out.println("Dao over"+rs.next()); while (rs.next()){ OverspeedDetails od=new OverspeedDetails(); od.setDeviceID(rs.getString(1)); String stringtimestamp=rs.getString(2); long l=Long.parseLong(stringtimestamp); long longtimestamp = l * 1000L; String str = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date(longtimestamp)); od.setTIMESTAMP(str); od.setSpeed(rs.getDouble(3)); od.setStatuscode(rs.getString(4)); String add=rs.getString(5); String add1[]=add.split(" //d"); //String add2=java.util.Arrays.toString(add.split(" ")); od.setAddress(add1[0]); overspeeddetail.add(od); } }catch (Exception e) { e.printStackTrace(); } System.out.println(overspeeddetail); return overspeeddetail; }


Puedes usar displaytag

La biblioteca de etiquetas de visualización es una suite de código abierto de etiquetas personalizadas que proporcionan patrones de presentación web de alto nivel que funcionarán en un modelo MVC. La biblioteca proporciona una cantidad significativa de funcionalidad sin dejar de ser fácil de usar.

Debes descargar el archivo jar de este sitio displaytag-1.2.jar

Usando la etiqueta de visualización puede exportar los datos en varios formatos, por ejemplo, Excel, PDF ect.
La clasificación de columnas es solo al hacer clic en el enlace del nombre de la columna.

Hay muchos ejemplos en el sitio http://displaytag.org

Código JSP:

<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>

Hay dos formas de obtener la lista en JSP
1) Usando jstl: (Recomendado)

Simplemente use la etiqueta sql:query y pase el resultado a la etiqueta de la tabla de esta manera

<sql:query var="results"> select * from table </sql:query> <display:table name="${results.rows}" /> (or <display:table name="pageScope.results.rows" /> if not using the EL version)

2) Usando dynabeans

<% Connection con = ...; // just open a connection Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * from table"); RowSetDynaClass resultSet = new RowSetDynaClass(rs, false); stmt.close(); con.close(); request.setAttribute("results", resultSet); %> <display:table name="requestScope.results.rows" />

Puede usar de cualquier manera pero primero se recomienda JSTL.

Puedes usar sessionScope

<display:table id="deviceDetailsID" name="sessionScope.overspeeddetails" pagesize="10" style="width:99%;"> <display:column property="deviceID" title="Device ID" sortable="true" headerClass="sortable" style="width: 1%"/> <display:column property="TIMESTAMP" title="TIMESTAMP" sortable="true" headerClass="sortable" format="{0,date,dd-MM-yyyy}"/> <display:column property="speed" title="Speed" sortable="true"/> <display:column property="statuscode" title="Status Code"/> <display:column property="address" title="Address" sortable="true" headerClass="sortable" /> </display:table>

Para usar <sql:query> agregue el jar JSTL 1.2 en classpath y en JSP

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

Debes agregar el archivo Commons Lang 2.6 en tu ruta de clases para evitar esto

java.lang.ClassNotFoundException: org.apache.commons.lang.UnhandledException

Ver también

  1. ¿Cómo evitar el código de Java en archivos JSP?
  2. JSTL sql
  3. Consulta de etiqueta
  4. guía de instalación de la etiqueta de visualización
  5. displaytag-export-poi 1.2 jar para usar la opción de exportación
  6. Displaytag-portlet 1.2 jar