2013-10-30 114 views
0

我有一個搜索JSP頁面,它將接受一些輸入字段並使用相應的給定字段向數據庫發送查詢。如果數據庫中有2000條相關記錄,則頁面將顯示前30個結果,並顯示下一個按鈕以顯示後續結果或上一個結果的上一個按鈕,就像我們在Google中搜索時一樣。 現在我的問題是我不知道如何做這些事情。我知道基本的servlet,JSP,JDBC。有沒有人解決這個問題?建議和想法非常感謝。 代碼會是這樣在jsp頁面中顯示頁面明智的結果

<%@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> 

豆和DAO類會是這樣

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; 


     } 
+0

你爲什麼不考慮去外部插件,像[jqGrid的(http://trirand.com/blog/jqgrid/jqgrid.html)或[數據表](HTTP://數據表。淨/) –

回答

2

您可以使用displaytag

顯示標籤庫是自定義標籤的一個開源套件它提供了可以在MVC模型中工作的高級Web表示模式。該庫提供了大量的功能,同時仍然易於使用。

你需要從this site displaytag-1.2.jar

下載JAR使用顯示標籤可以導出各種格式例如數據Excel,PDF等。
列排序只是點擊列名鏈接。

沒有在網站上有很多例子http://displaytag.org

JSP代碼:

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

有兩種方式來獲得在JSP
1)使用JSTL名單:(推薦)

只需使用sql:query標籤並將結果以此方式傳遞給表格標籤

<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)使用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" /> 

您可以使用的方式,但第一JSTL建議。

您可以使用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> 

要使用<sql:query>在類路徑和JSP

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

您需要在您的類路徑中添加Commons Lang 2.6 jar避免這種

添加 JSTL 1.2 jar

java.lang.ClassNotFoundExc eption:org.apache.commons.lang。UnhandledException

又見

  1. How to avoid Java Code in JSP-Files?
  2. JSTL sql
  3. Tag query
  4. display tag install guide
  5. displaytag-export-poi 1.2 jar to use export option
  6. displaytag-portlet 1.2 jar
+0

感謝您的答覆。我不明白你可以明確指定 – hari

+0

我更新了我的代碼,因爲我們的代碼,但它顯示錯誤,如「標籤處理程序類爲」顯示:setProperty「(org.displaytag.tags.SetPropertyTag )在Java Build Path中找不到「。可以幫助 – hari

+0

@hari:對不起!基本上你不需要這個''只是刪除。這是我的項目需要的。看到我更新的帖子。謝謝。 –