• 締切
  • 困ってます

ページ処理

  • 質問No.2049732
  • 閲覧数723
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 17% (4/23)

JSPの、通信教育を受けていますが、タブ区切りの商品テキストを読み込み、5点づつ表示させる。
下記のJSPに、
[ ○件中の○-○件の表示 ]
[ 前へ / 1 2 3 4 5 / 次へ ]
というページ処理をさせたいのですが、うまくいきません。通信教育は、受講料が安いせいか、質問しても「ループを使い読み飛ばせ」ぐらいの回答しか得られず困っています。どなた様かご教授願えないでしょうか。
<th>商品</th><th>商品名</th><th>現在価格</th><th>入札</th><th>締切日</th></tr>

String tmpStr;
StringTokenizer tkn;
FileReader fr = new FileReader(application.getRealPath("data.txt"));
BufferedReader br = new BufferedReader(fr);
DecimalFormat df;
df = new DecimalFormat("###,###");
while(br.ready()){
tmpStr = br.readLine();
out.println("<tr style='background:#ffffcc'>");
tkn = new StringTokenizer(tmpStr,"\t");
byte i;
i=0;
String strTmp;
while(tkn.hasMoreTokens()){
strTmp = tkn.nextToken();
switch(i){
case 0:
case 4:
out.println("<td algin='right'>" + strTmp +"</td>");
break;
case 1:
out.println("<td>" + strTmp + "</td>");
break;
default:
out.println("<td align='right'>" +df.format(Long.parseLong(strTmp)) +"</td>");
}
i++;
}
out.println("</tr>");
}
br.close();

%>
</table>
</body>
</html>
お願いします。

回答 (全3件)

  • 回答No.3

ベストアンサー率 57% (11/19)

具体的な数値をあてはめると、話が早いです。
例えば、以下のような場合:

総データ数 : 37件 ( 37行 )
最大表示数 : 5行
=>
page = ( 37 + 5 - 1) / 5 = 41 / 5 = 8 ( = AllPage )

になります。( int 同士の割り算の結果は int )
37件を5件ずつ表示するには、8ページ必要ということですね。

8ページ分のリンクを作りたいわけだから、

for ( int i = 0; i < AllPage; i++){
out.print("<a href='***jsp?PageNo=" + (i + 1) + ">" + (i + 1) + "</a>");
// [ <a href='***jsp?PageNo= ] : 文字, [ (i + 1) ] : 変数, [ > ] : 文字, [ (i + 1) ] : 変数, [ </a> ] 文字 をあわせたもの
// 文字 + 変数 + 文字 + 変数 + 文字 を print する。
}

するわけです。
その前後に、[前へ] [次へ] というリンクを加えたものが、

<a href="***.jsp?PageNo=(RequiredPage-1)">前へ</a> を出力

for (i=0; i<AllPage; i++){
<a href="***.jsp?PageNo=(i+1)">(i+1)</a> を出力
}

<a href="***.jsp?PageNo=(RequiredPage+1)">次へ</a> を出力

の意味です。(ここも、out.print が必要になります)

***.jsp?PageNo=2 の PageNo=2 は、こちらで勝手に決めたものです。
ブラウザからJSP(***.jsp)にリクエストしたときに、
テーブルに何ページ目が表示されるかを決めることが目的です。
これがないと、***.jsp にリクエストはするけど、何ページ目を表示するのか分かりません。

***.jsp?PageNo=1 ・・・ テーブルに1ページ目を表示
***.jsp?PageNo=2 ・・・ テーブルに2ページ目を表示
  • 回答No.2

ベストアンサー率 57% (11/19)

int page;(ページ数) は、
変数int max;(最大表示数)
int count;(総データー数)
を用いて、

page = (count + max - 1) /max

と表せます。
この回数分、<a href="~">を出力すれば
[ 前へ / 1 2 3 4 5 / 次へ ]
が出力されますね。

<a href="~">は
<a href="***.jsp?PageNo=2">みたくパラメータを持たせましょう。

ということは、***.jsp の先頭で、パラメータを受け取る処理が必要になります。
request.getParameter("PageNo") で要求ページ番号が「文字」として取得できるので、
数値に変換すれば、この数値によってテーブルの内容や<a href="~">するかしないかなどの分岐が出来ると思います。

具体的にはテーブルの上のほうで
int RequiredPage;
String strPage;

strPage = request.getParameter("PageNo");
try{
RequiredPage = Integer.parseInt ( strPage );
}
catch (){ // 何らかの例外が出たら 先頭ページが要求されたことにする
RequiredPage = 1;
}

テーブルの下で
int AllPage = ( count + ( max - 1 ) ) / max; // ページ数を求める

<a href="***.jsp?PageNo=(RequiredPage-1)">前へ</a> を出力

for (i=0; i<AllPage; i++){
<a href="***.jsp?PageNo=(i+1)">(i+1)</a> を出力
}

<a href="***.jsp?PageNo=(RequiredPage+1)">次へ</a> を出力

のような感じになるかと思います。
補足コメント
berryn3

お礼率 17% (4/23)

詳細な解答ありがとうございます。これだけ書いて頂けると解決できると思い2日間必死に頑張りましたが、
Eclipsedeで「構成が間違っています」というエラーがでます。
「int AllPage = ( count + ( max - 1 ) ) / max; // ページ数を求める

<a href="***.jsp?PageNo=(RequiredPage-1)">前へ</a> を出力

for (i=0; i<AllPage; i++){
<a href="***.jsp?PageNo=(i+1)">(i+1)</a> を出力
}

<a href="***.jsp?PageNo=(RequiredPage+1)">次へ</a> を出力」
この部分を、さらにご教授いただけないでしょうか?よろしくお願いします。
投稿日時:2006/03/28 12:35
  • 回答No.1

ベストアンサー率 26% (181/684)

データに番号を振って
たとえば 1P 0-20
     2P 20-40
     3P 40-60
のように1Pを選択されたら(POSTなどで)
0-20のみを表示するようにしたらよいの
では?
補足コメント
berryn3

お礼率 17% (4/23)

早い、解答ありがとうございます。頭の中では、
変数int max;(最大表示数)
int page;(ページ数)
int count;(総データー数)
をセットしてfor?文を使うということは解っているつもりですが、この例題の中で、具体的にご教授願えないでしょうか?よろしくお願いします。
投稿日時:2006/03/25 18:06
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ