0

いくつかの入力フィールドを受け入れ、それぞれの指定されたフィールドでクエリをデータベースに送信する検索 JSP ページがあります。データベースに 2000 件の関連レコードがある場合、ページには最初の 30 件の結果が表示され、次の結果を表示するには [次へ] ボタンが表示され、Google で検索する場合と同様に、前の結果を表示するには [前へ] ボタンが表示されます。今、私の問題は、これらのことを行う方法がわからないことです。サーブレット、JSP、JDBC の基本を知っています。この問題を解決する人はいますか?提案やアイデアは大歓迎です。コードはこのようになります

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

bean と 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;


        }
4

1 に答える 1

2

表示タグを使用できます

表示タグ ライブラリは、MVC モデルで機能する高度な Web プレゼンテーション パターンを提供するカスタム タグのオープン ソース スイートです。このライブラリは、使いやすさを維持しながら、かなりの量の機能を提供します。

このサイトからjarをダウンロードする必要がありますdisplaytag-1.2.jar

表示タグを使用すると、Excel、PDF などのさまざまな形式でデータをエクスポートできます。
列の並べ替えは、列名のリンクをクリックするだけです。

サイトhttp://displaytag.orgに多くの例があります

JSPコード:

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

JSP でリストを取得するには 2 つの方法があります
。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) ダイナビーンの使用

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

クラスパスと JSP に JSTL 1.2 jar<sql:query>を追加して使用するには

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

これを回避するには、クラスパスに Commons Lang 2.6 jarを追加する必要があります

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

こちらもご覧ください

  1. JSPファイルでJavaコードを回避するには?
  2. JSTL SQL
  3. タグクエリ
  4. 表示タグのインストール ガイド
  5. エクスポート オプションを使用するための displaytag-export-poi 1.2 jar
  6. displaytag-portlet 1.2 jar
于 2013-10-30T09:29:07.280 に答える