アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://oshiete.goo.ne.jp/qa/6410907.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に飛ぶと同じ情報が保持されたままとなっています。

何か前後の情報を格納しないと期待する処理は行われないと思うのですが、
その部分でまた詰まってしまいました・・・。

アドバイス等御座いましたらお願いいたします。

A 回答 (2件)

ANo. 1です。



>NextもBackも表示されなくなってしまいました。
失礼、比較演算子が間違えていました。
これで正しく動くと思います。
大変失礼しました。

f(0 < page){
// Backを表示
}

if((page+1)*10 <= array.size()){
// Nextを表示
}

ちなみに、補足で書かれたコードはNextとBackが逆になっている(間違えている)のでご注意ください。
    • good
    • 0
この回答へのお礼

逆になってますね。
申し訳ありません、自分の記述ミスです・・・。

shiren2さんのアドバイスを元にあれから試行錯誤した結果、
無事にページング処理が出来るようになりました!

本当に有難うございました。
何かありましたら、また宜しくお願い致します。

お礼日時:2011/01/06 20:09

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を表示
}


見当違いなら申し訳ありません。

この回答への補足

アドバイス有難うございました!
ご意見を参考に以下のソースに作り替えてみました。

**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のままになってしまっているようです。


申し訳ありませんが、ご教授お願いいたします。

補足日時:2011/01/04 17:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!