ページング処理について

このQ&Aのポイント
  • ArrayListを使った一覧表示にページング処理を追加したい。DBの内容を10件ごとに表示し、BackとNextのリンクで画面を移動する。次に表示する10件がない場合はリンクを非表示にしたい。
  • Servletでボタンがクリックされたら、list.jspに遷移してデータを10件ずつ表示する。セッションに情報を保持する。
  • list.jspでは、セッションからデータを取得してテーブルに表示する。変数iを使って5件まで表示し、BackとNextのボタンを追加する。しかし、次に表示すると同じ情報が保持されたままになってしまう。前後の情報を格納する方法についてアドバイスを求めている。
回答を見る
  • ベストアンサー

ページング処理について

http://okwave.jp/qa/q6410907.html 以前↑の内容を投稿したものです。 解決に至らなかった為、再投稿させて頂きます。 ArrayListに格納する方法を使って一覧表示に ページング処理を加えたいのですが、その方法がよく分からず頭を抱えています。 期待する結果は以下の通りです。 (1)DBの内容を10件ごとに表示し、「Back」「Next」のリンクを使って画面を移動する。 (2)次(もしくは前)に表示する10件がない場合は上記のリンクを非表示としたい。 下記はソースの一部です。 **Srvlet** if(button != null && button.equals("一覧")){ target = "/list.jsp"; CList cList = new CList(); List list = cList.list(); HttpSession. session=request.getSession(); session.setAttribute("SELECT", list); } **JSP** //省略// <BODY> <BR> <% ArrayList array = (ArrayList)session.getAttribute("SELECT"); for(int i=0 ; i<array.size() ; i++){ Bean bean = (Bean)array.get(i); %> <TR> <TD><INPUT type="radio" name="radio" value="<%= (int)bean.getId() %>" <%= bean == array.get(0) ? "checked" : ""%>></TD> <TD><%= (int)bean.getId() %></TD> <TD><%= (String)bean.getName() %></TD> <TD><%= (String)bean.getTel() %></TD> </TR> <% if(i==4){ break;} %> <%} %> </TABLE> </TD> </TR> </TABLE> </FORM> </DIV> <a href="list.jsp?list=1"> <font color="#0000ff"><b>Back</b></font></a> <a href="list.jsp?list=2"> <font color="#0000ff"><b>Next</b></font></a> 変数iをbreakすることで5件までの表示に成功しました。 情報を記憶出来ているとは思うのですが NEXT・BACKに飛ぶと同じ情報が保持されたままとなっています。 何か前後の情報を格納しないと期待する処理は行われないと思うのですが、 その部分でまた詰まってしまいました・・・。 アドバイス等御座いましたらお願いいたします。

  • Java
  • 回答数2
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • shiren2
  • ベストアンサー率47% (139/295)
回答No.2

ANo. 1です。 >NextもBackも表示されなくなってしまいました。 失礼、比較演算子が間違えていました。 これで正しく動くと思います。 大変失礼しました。 f(0 < page){ // Backを表示 } if((page+1)*10 <= array.size()){ // Nextを表示 } ちなみに、補足で書かれたコードはNextとBackが逆になっている(間違えている)のでご注意ください。

mew-ktrk
質問者

お礼

逆になってますね。 申し訳ありません、自分の記述ミスです・・・。 shiren2さんのアドバイスを元にあれから試行錯誤した結果、 無事にページング処理が出来るようになりました! 本当に有難うございました。 何かありましたら、また宜しくお願い致します。

その他の回答 (1)

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.1

JSPは専門外ですが…。 arrayに全データが保持されているとして、forでi=0から毎度やり直せば、先には進まないのではと思います(0 .. 4までを毎回繰り返す)。 下記のような流れになると思います。 String str = request.getParameter("list"); int page = (str != null ? Integer.parseInt(str) : 0); for(int i=page*10; i<array.size() ; i++){ ... >(2)次(もしくは前)に表示する10件がない場合 if(0 < page){ // Backを表示 } if(array.size() < page*10){ // Nextを表示 } 見当違いなら申し訳ありません。

mew-ktrk
質問者

補足

アドバイス有難うございました! ご意見を参考に以下のソースに作り替えてみました。 **JSP** (先日のif文の下に作成しました) <% String str = request.getParameter("list"); int paging = (str != null ? Integer.parseInt(str) : 0); for(int i=paging*10; i<array.size() ; i++){ Bean bean2 = (Bean)array.get(i); %> <%if(0 < paging){ %> <a href="/webapp/control?list=1"> <b>NEXT</b></font></a> <%} %> <%if(array.size() < paging*10){ %> <a href="/webapp/control?list=6"> <b>BACK</b></font></a> <%}%> <%} %> </BODY> **Servlet** public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ try{ request.setCharacterEncoding("Windows-31J"); String list = request.getParameter("list"); しかし、実行してみると先頭の10件のみが表示され、NextもBackも表示されなくなってしまいました。 (実際にはDB内には12件入っております。) デバッグで値を確認してみたところ、Paging内が0のままになってしまっているようです。 申し訳ありませんが、ご教授お願いいたします。

関連するQ&A

  • DBを10件毎に表示ページング処理方法

    度重なる質問申し訳ありません。 現在DB操作について学んでいるJava独学者です。 下記のようなソースで一覧表示画面を作成してみました。 この一覧画面をページング処理したいのですが、その方法がよく分からず頭を抱えています。 期待する結果は以下の通りです。 (1)DBの内容を10件ごとに表示し、「Back」「Next」のリンクを使って画面を移動する。 (2)次(もしくは前)に表示する10件がない場合は上記のリンクを非表示としたい。 ※ちなみにDBはPostgreSQLを使用しております。 下記はソースの一部です。 **Srvlet** if(button != null && button.equals("一覧")){ target = "/list.jsp"; CList cList = new CList(); List list = cList.list(); request.setAttribute("SELECT", list); } **JSP** <%@page contentType="text/html; charset=Windows-31J" %> <%@page import="java.util.*" %> <%@page import="XXXX.bean.Bean" %> <%@page import="XXXX.service.CList" %> <%@page import="XXXX.service.Search" %> <jsp:useBean id="SELECT" class="java.util.ArrayList" scope="request"/> <HTML> <HEAD> //省略// </HEAD> <BODY> <BR> <% ArrayList array = (ArrayList)request.getAttribute("SELECT"); for(int i=0 ; i<array.size() ; i++){ Bean bean = (Bean)array.get(i); %> <TR> <TD><INPUT type="radio" name="radio" value="<%= (int)bean.getId() %>" <%= bean == array.get(0) ? "checked" : ""%>></TD> <TD><%= (int)bean.getId() %></TD> <TD><%= (String)bean.getName() %></TD> <TD><%= (String)bean.getTel() %></TD> </TR> <%} %> </TABLE> </TD> </TR> </TABLE> </FORM> </DIV> <a href=""> <font color="#0000ff"><b>Back</b></font></a> <a href=""> <font color="#0000ff"><b>Next</b></font></a> **CList.java** DBAccess db = new DBAccess(); db.open(); String SQL = "SELECT*FROM LIST ORDER BY ID ASC;"; db.setSql(SQL); ResultSet rs=db.select(); List list = new ArrayList(); while (rs.next()) { Bean bean = new Bean(); bean.setId(rs.getInt("ID"));                   bean.setName(rs.getString("NAME")); bean.setTel(rs.getString("TEL")); list.add(bean); } rs.close(); db.close(); return list; } } 色々調べた結果、SQL文を使う方法とArrayList等に格納する方法があるようですが、 どちらも良く理解出来ませんでした。 勉強不足で申し訳ありませんが、ご教授お願いいたします。

  • JSPとjavaの問題

    ResultSet rs = db.getResultSet("SELECT * FROM SHAINLIST "); ArrayList list = new ArrayList(); while(rs.next()) { int state = rs.getInt("attendance"); list.add(new Integer(state)); } int[] in = new int[list.size()]; for (int i = 0; i < list.size(); i++) { in[i] = ((Integer)list.get(i)).intValue(); } %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSPでDB接続</title> </head> <body> <table> <tr><td>欠席</td><td>><%= countNum(-1, in) %></td></tr> <tr><td>未定</td><td><%= countNum(-1, in) %></td></tr> <tr><td>出席</td><td><%= countNum(-1, in) %></td></tr> </table> 以下のエラーがでてきますが、どういう意味でしょうか。 org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: /jsp/tokei.jsp の中の26行目でエラーが発生しました The method countNum(int, int[]) is undefined for the type tokei_jsp 23: </head> 24: <body> 25: <table> 26: <tr><td>キ鄲ハ</td><td>><%= countNum(-1, in) %></td></tr> 27: <tr><td>フ、ト�</td><td>3</td></tr> 28: <tr><td>スミタハ</td><td>3</td></tr> 29: </table> よろしくおねがいします。

    • ベストアンサー
    • Java
  • jspでのremoveによる削除方法

    通販サイトのカートの画面で購入した商品一覧が表示される画面です 削除ボタンで商品を削除したいのですが上手くいきません for(int i=0; i<item.size(); i++){ String[] b=(String[])item.get(i); tableData +="<form action=\"cart.jsp\"><tr><td>"+b[0]+"</td><td>"+b[1]+"</td><td><img src=\""+"img/"+b[2]+"\"</td><td> <input type =\"hidden\" name=\"remove\" value=\""+i+ "\"> <input type=\"submit\" name=\"d\" value=\"カートから削除する\"></form></td></tr>"; } String removeValues=request.getParameter("remove"); session.removeAttribute(""); 全文です <%@ page contentType="text/html;charset=Shift_JIS"%> <%@ page import= "java.util.ArrayList" %> <%@ page import= "java.util.List" %> <%@ page session="true" %> <% request.setCharacterEncoding("Shift_JIS"); String[] Name ={"たらばがに","毛ガニ","いか","うに","あわび"}; String[] Price = {"4000","2500","500","3000","1500"}; String[] Img ={"taraba.gif","ke.gif","ika.gif","uni.gif","awabi.gif"}; String tableData =""; ArrayList item=(ArrayList)session.getAttribute("itemlist"); try { for(int i=0; i<item.size(); i++){ String[] b=(String[])item.get(i); tableData +="<form action=\"cart.jsp\"><tr><td>"+b[0]+"</td><td>"+b[1]+//商品一覧を出す "</td><td><img src=\""+"img/"+b[2]+"\"</td><td><input type =\"hidden\" name=\"remove\" value=\""+i+ "\"><input type=\"submit\" name=\"d\" value=\"カートから削除する\"></form></td></tr>"; } String removeValues=request.getParameter("remove"); session.removeAttribute(""); int cost =0;//合計金額 for(int j=0; j<item.size(); j++){ String[] a=(String[])item.get(j); Integer value=Integer.parseInt(a[1]); cost +=value; session.setAttribute("costs",cost); } }catch(Exception e){ //tableData+=("<tr><td>"+"戻って入力してください"+"</td></tr>"); } %> <!doctype html> <html> <head> </head> <h2>カートの詳細</h2> 合計金額は<%=session.getAttribute("costs")%>円になります<br><!--合計金額の表示 --> <br> <table border ="1"> <%=tableData %> </table> <br> <a href="session.jsp">商品一覧に戻る</a> <br> </html>

    • ベストアンサー
    • Java
  • struts の検索結果の表示

    struts で、入力された文字列を含むデータをJSPで表示させるものを作成したいと思っています。 検索結果を ArrayList の形式で持たせています。 結果の中身は、カンマ区切りで複数のデータが1レコードに含まれています。(こんな感じです・・・"東京,01,22,日本") その結果を、session.setAttribute("resultList", searchResult); ※searchResult==検索結果ArrayListの名前 の形でJSPに送り表示させたいのですが、JSP側でどのように記述すればうまく表示できるのかが不明です。 表示は、tableを使用して <table> <tr> <td>東京</td><td>01</td><td>22</td><td>日本</td> </tr> </table> のようにしたいです。 お分かりの方がいましたら、回答ください。

  • strutsでArrayListの中の配列の表示の仕方。

    タイトルどおりなんですが。よくわかりません。例えば以下のようです。numberに紐づいた複数のデータが配列に入っています。 public static Bean setBean (int number, String[] strArray){ bean.setNumber(number); bean.setArray(strArray); return bean; } たいぶ、はしょってますがこんな感じでbeanにintのnumberとStringの配列をsetして、受け取り側でそのbeanをArrayList(array)にaddしています。それをjspで表示したいのです。jspは下のようです。 <logic:iterate name="form" property="array" id="list" > <bean:write name="list" property="number"> ここにstrArrayを表示したい。 </logic:iterate>  といった具合です。どお書けばいいんでしょうか?ご教授お願いします。

    • ベストアンサー
    • Java
  • ページング処理をさせたい

    テーブルのデータを20件表示させ、「next」を押すと 次の20件を表示させるPHPを作成したいと考えています。 (「back」を押すと、前の20件を表示するようにもしたい) そこで、以下のようなファイルを作成しました。 実行をすると、idが「1」から「19」までのデータが表示され、 「next」を押しても、同じ「19」までのデータが表示されます。 (idは「1,2,3,4,…」のように1づつ増えるフィールドになります。) **************************************** 作成したtest.phpのコード 環境:PHP5 Apache2.2 MQSQLver5 **************************************** <body> <a href="test.php?p=10">next</a> <?php $startData = $_GET['p'];//GET送信された件数の値を取得 $endData = $startData + 10-1; $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('[DB名]', $cont); $sql = "select * from テーブル名 where id <= ".$endData; $rc = mssql_query($sql,$cont); ?> <table> <?php do{ while ($array = mssql_fetch_array($rc)) { print("<tr>"); print("<td>"); print $array["氏名"]; print("</td>"); print("<td>"); print $array["住所"]; print("</td>"); print("</tr>"); } }while (mssql_next_result($rc));//次のデータの読み込み mssql_close($cont); ?> </table> </body> </html>

    • ベストアンサー
    • PHP
  • 長文失礼致します。Java初心者の者です。

    MVCモデルに挑戦しているのですが、JSPの部分でエラーが出ます。 何か足りない気はするのですが、何を記述したら良いのか分かりません。 以下、一部抜粋です。 //JSP <%@ page contentType="text/html; charset=Windows-31J" %> <%@ page import="java.util.*"%> <%@ page import= "jp.co.xxx.bean.Jyusho" %> <jsp:useBean id="LIST" class="java.util.ArrayList" scope="request"/> //ここに何か記述しないといけない気がします。 <html><body> <TABLE BORDER="1"> <TR><TD><b>NO</b></TD><TD><b>名前</b></TD><TD><b>住所</b></TD><TD><b>電話番号</b></TD></TR> <TR> <TD><%=LIST.getNo() %></TD> <TD><%=LIST.getName()%></TD> <TD><%=LIST.getAddress()%></TD> </TR> </TABLE></body></html> //JyushoServlet public class JyushoServlet extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{Jyusho jyusho = new Jyusho(); List list = Jyusho.list(); request.setAttribute("LIST", list);} catch(Exception e){ e.printStackTrace(); } finally{ ServletContext context = this.getServletContext(); RequestDispatcher dispatcher = context.getRequestDispatcher("/jyusho.jsp"); dispatcher.forward(request, response);} } } //JyushoBean public String getAddress() { return address;} public void setAddress(String address) { this.address = address;} public String getNo() { return no;} public void setNo(String no) { this.no = no;} public String getName() { return name;} public void setName(String name) { this.name = name;} //Jyusho List list = new ArrayList(); while(resultSet.next()){ JyushoBean bean = new JyushoBean(); bean.setNo(resultSet.getString("NO")); bean.setName(resultSet.getString("NAME")); bean.setAddress(resultSet.getString("ADDRESS")); list.add(bean);} return list;} public List list(String no)throws ClassNotFoundException, SQLException{ List list = new ArrayList(); Iterator it = list().iterator(); while(it.hasNext()){ JyushoBean bean = (JyushoBean)it.next(); if(bean.getNo().equals(no)){ list.add(bean);} }return list;} } お手数ですが、ご教授お願い致します。

    • ベストアンサー
    • Java
  • jspでのArrayListの値の表示

    jsp上でBeanで以下のように設定されている ArrayList<ArrayList<Integer>> a; a.add(new ArrayList<Integer>); a.add(new ArrayList<Integer>); a.add(new ArrayList<Integer>); a.get(0).add(0); a.get(0).add(1); a.get(1).add(2); a.get(1).add(3); a.get(1).add(4); a.get(1).add(5); a.get(2).add(6); a.get(2).add(7); a.get(2).add(8); aのような行と列が不定のArrayListの全ての値をjspの画面上に  値 値 値  0  2  6  1  3  7    4  8    5 といったようにテーブルで表示したいのですがjspにどのような既述をすればよいでしょうか? クリックしたときの処理などの導入や項目を増やすなど拡張する場合があるので 以下のような形とレイアウトが同じようになると望ましいです <td> <table> <tr>値</tr> <tr>0</tr> <tr>1</tr> <tr>2</tr> </table> </td> <td> <table> <tr>値</tr> <tr>3</tr> <tr>4</tr> <tr>5</tr> </table> </td> <td> <table> <tr>値</tr> <tr>6</tr> <tr>7</tr> <tr>8</tr> </table> </td>

  • サーブレットから送られてきた文字が表示されない

    urizakaです さて、OSはWindows2000、アプリケーションサーバーはTomcat-3.3aという環境でJSP+DB(posgreSQL windows-Native版)でサーブレットからBeanにDBのデータを検索させるというきわめてオーソドックスなプログラムを組んだのですが、どうしたわけかブラウザー(IE6.0)の画面にJSPで設定したタブや文字が表示されず、真っ白に表示されてしまいます。プログラムのエラーかと思って、Tomcatの画面を見てみたのですが、Tomcatにはエラーらしい表示はなく、それどころか表示→ソースの順番に見てみるとちゃんとそこには表示したかったデータのHTMLデータがある状態です。表示→エンコードで文字種類を変えてもだめでした。別にMETAタグで変な設定をしているわけではないのですが・・・ ちなみに、JSPのソースコードは以下のようです <%@ page import = "NeoBean" %> <jsp:useBean id="neobean" scope="session" class="NeoBean"/> <HTML> <head> <title>サンプルでGO!</tilte> </head> <body> <input type="button" value="aaaa"> <H3>サンプル画面表示</H3> <table width="100%" border="1"> <% int i = 0; for(int lp = 1; lp <= neobean.getID().size(); lp++){ %> <TR> <TD width="20%"> <% out.println(neobean.getID().elementAt(i)); %> </TD> <TD width="80%"> <% out.println(neobean.getName().elementAt(i)); %> </TD> </TR> <% i++; } %> </table> </body> </HTML> すみませんが、ご存知の方よろしくお願いします。

    • ベストアンサー
    • Java
  • arraylist 二次元配列

    こんにちは 今アレイリストの二次元配列を学習しています DBからデータを取得で表示したいと思っています そこでfor文の拡張とつかうとうまくいうのですが 普通に記述するとうまくいきません 拡張FOR 文を使うのは初めてなので 何が違うかアドバイスお願いします コンパイルできません↓ if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ ArrayList<ArrayList> hai = new ArrayList<ArrayList>(); ArrayList list = (ArrayList)request.getAttribute("list"); if (list != null) { hai.add(list); } ArrayList list1 = (ArrayList)request.getAttribute("list1"); if (list1 != null) { hai.add(list1); } ArrayList list2 = (ArrayList)request.getAttribute("list2"); if (list2 != null) { hai.add(list2); } for (int i = 0; i < hai.get(0).size(); i++) { %> <table border="3"> <tr> <% for (int k = 0 ; k <= hai.size(); k++) { %> <td width="60"> <% out.print(hai.get(i)); } %> コンパイルOK 表示できています <% if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ ArrayList<ArrayList> hai = new ArrayList<ArrayList>(); ArrayList list = (ArrayList)request.getAttribute("list"); if (list != null) { hai.add(list); } ArrayList list1 = (ArrayList)request.getAttribute("list1"); if (list1 != null) { hai.add(list1); } ArrayList list2 = (ArrayList)request.getAttribute("list2"); if (list2 != null) { hai.add(list2); } for (int i = 0; i < hai.get(0).size(); i++) { %> <table border="3"> <tr> <% for (ArrayList list4 : hai) { %> <td width="60"> <% out.print(list4.get(i)); } %> <br> </tr> </table> <% 上のソースの エラーメッセージ 2013/04/16 9:24:12 org.apache.catalina.core.ApplicationDispatcher invoke 致命的: サーブレット jsp のServlet.service()が例外を投げました java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 よろしくお願いします

    • ベストアンサー
    • Java

専門家に質問してみよう