質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Java

    14466questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Java servlet jsp MySQLでのページング処理

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 362

akamarukun

score 17

現在、Javaを勉強中で、jsp、servlet、mySQLを使ってショッピングサイト風なものを作っています。
お聞きしたいことが、MySQLに登録してある商品データを一覧として表示しているんですが、現状は全て表示されます。この全て表示されるんではなくて5件なり、10件なりで表示して、ページング処理をしたいと思っています。このページング処理がわからなくてお聞きしたいです。
以下、コードです。

itemList.jsp

<%@ page import="java.util.ArrayList"%>
<%@ page import="bean.ItemBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<!DOCTYPE html>
<html>
    <head>
        <title>ECサイト</title>
        <link href="/ecsite/css/shopping.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <jsp:include page="header.jsp"/>
        <h1>商品一覧</h1>
        <% ArrayList<ItemBean> itemList = (ArrayList<ItemBean>)request.getAttribute("itemList"); %>
        <form action="./BuyItemServlet_ans">
            <table class="table_list">
                <tbody>
                    <tr>
                        <th>商品画像</th>
                        <th>商品名</th>
                        <th>価格</th>
                        <th>在庫数</th>
                        <th>数量</th>
                    </tr>

                    <%-- Beanの要素数分(商品の種類分)テーブルを作成 --%>
                    <% for(ItemBean bean : itemList) { %>
                    <tr>
                        <%-- 商品ID --%>
                        <!--  <td><%= bean.getItemId() %></td> -->
                        <%-- 商品画像 --%>
                        <td><img src ="<%= bean.getItemImage() %>" width="100" height="auto"></td>
                        <%-- 商品名 --%>
                        <td><%= bean.getItemName() %></td>
                        <%-- 価格 --%>
                        <td class="int"><%= bean.getPrice() %></td>
                        <%-- 数量(在庫) --%>
                        <td class="int"><%= bean.getQuantity() %></td>

                        <% if(bean.getQuantity() != 0) { %>
                        <td>
                            <select class="list" name="<%= bean.getItemId() %>list">
                                <% for(int i = 0; i <= bean.getQuantity(); i++) { %>
                                    <option value=<%=i%>><%=i%></option>
                                <% } %>
                            </select>
                        </td>
                        <td class="button">
                            <input class="common_button" type="submit" value="購入" name="<%= bean.getItemId() %>">
                        </td>
                        <% } else { %>
                        <td></td>
                        <td class="button">売り切れ!</td>
                        <% } %>
                    </tr>
                <% } %>
                </tbody>
            </table>
            <input class="common_button" type="button" onclick="location.href='./index.jsp'" value="戻る">
        </form>
    </body>
</html>

shopDao.java

public ResultSet selectItem() throws SQLException {

        try {


            Class.forName("com.mysql.jdbc.Driver");


            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample",
                                              "root",
                                              "XXXXXXXX");
            // SQL文を生成
            ps = con.prepareStatement("select item.item_id, item.item_image, item.item_name, item.price, stok.quantity from item inner join stok on item.item_id = stok.item_id");

            // SQLを実行
            rs = ps.executeQuery();

        } catch(ClassNotFoundException ce) {

            // JDBCドライバが見つからなかった場合
            ce.printStackTrace();
        }

        return rs;
    }


shop.java

public ArrayList<ItemBean> getItem() {

        ArrayList<ItemBean> beanList = new ArrayList<ItemBean>();
        ShoppingDao dao = null;
        ResultSet rs = null;

        try {

            // DAOクラスをインスタンス化
            dao = new ShoppingDao();
            // 現在の商品一覧を検索
            rs  = dao.selectItem();

            // 検索結果を1レコードずつ処理
            while(rs.next()) {

                // 商品一覧を格納するBeanクラスをインスタンス化
                ItemBean bean = new ItemBean();

                // 商品IDを設定
                bean.setItemId(rs.getString("item_id"));
                // 商品画像を設定
                bean.setItemImage(rs.getString("item_image"));
                // 商品名を設定
                bean.setItemName(rs.getString("item_name"));
                // 商品価格を設定
                bean.setPrice(rs.getInt("price"));
                // 商品数を設定
                bean.setQuantity(rs.getInt("quantity"));

                // Beanクラスをリストに追加
                beanList.add(bean);
            }

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            // 処理終了時に各接続を解除
            dao.close();
        }

        return beanList;
    }

以上になります。拙いコードですが、よろしくお願いします。
なんとなくDAOクラスのDB周りで制御するのかなと感

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

わかりやすい構成としては、
・画面にページング部品(« ‹ 123...10 › »)を表示する
・パラメータにページ番号を追加する(http://localhost:8080?p=2)
・SQLにページングを追加する:limit文とかoffset文とか使います、探してみてください
くらいですかね。limitで表示件数を、offsetで表示開始位置(2ページ目なら6件目から表示するなど)を制御します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    14466questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。