Strutsのページングでoffsetの設定方法

このQ&Aのポイント
  • Strutsのページング機能において、offsetの設定方法について質問させてください。
  • 検索結果を一括取得してコレクションに格納し、ページング機能を実現するためにoffsetを変えて表示する方法について教えてください。
  • また、スクリプトレットを使わずにoffsetを変える方法があれば教えていただけますか?
回答を見る
  • ベストアンサー

Strutsのページングにてoffsetに設定する

以前の解答を参照した上で質問させてください。 ------------------------------------------------- 検索結果を一括取得してコレクションに入れてセッションに格納。 logic:iterate等でループさせるわね。 offsetが表示を開始する位置、lengthが最大数。 lengthは固定でoffsetを変えていけばページングが実現できるわ。 欠点は検索結果が多いとメモリを圧迫することね。 ------------------------------------------------- ↑ このときoffsetを変える際にスクリプトレットを使用しない方法がありますでしょうか?

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

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

  • ベストアンサー
回答No.1

ページ番号はわかってるだろうから、 EL式で求めれば良いんじゃないの?

rockman_se
質問者

お礼

ありがとうございます。 なるほど、EL式という存在を始めて知りました。 これなら実現できそうです。 ご回答ありがとうございました!

その他の回答 (1)

  • tegra
  • ベストアンサー率64% (9/14)
回答No.2

検索結果を一括でセッションに格納している時点でメモリを 圧迫しています。 サーブレット側で一括で取得せず表示したいページの情報だけ 取得すればいいんじゃないですか? DB使っているならSQLで絞るってこと。

rockman_se
質問者

お礼

ありがとうございます。メモリ圧迫しているのは認識してます。 SQLで絞る方法も知ってます。 一括で取得したかったので今回の質問をさせていただきました。 ご回答ありがとうございました!

関連するQ&A

  • logic:iterateの属性にスクリプトレットで値を設定する方法

    JSPでコーディングを行っています。 やりたい事としては、アクション項目からあるLIST型変数(個数M個(可変))を logic:iterateを用いて、縦N行、横4列の表形式で表示させたいです。 類似した質問(http://oshiete1.goo.ne.jp/qa2945171.html)を参考に、 サンプルを作成して動作させてみたのですが、 logic:iterate内のoffsetにスクリプトレットで値を設定しようとすると エラー(?)となり画面が表示されなくなります。(固定値設定時には表示されています。) logic:iterateやその他タグ内の属性にどのように設定すれば動作させる事ができるかご教授下さい。 (int型のiをoffsetに設定しているのがよくないのでしょうか?(offsetに設定するのはString型でないとダメ?)) ============================================================================================================================================= <table> <%for(int i=0; i < 4; i++) { %> <tr> <%-- <logic:iterate id="shohinId" name="DvdRentalSearchForm" offset="2" length="4" property="shohinInfoList" indexId="index"> --%> <%-- ↑上記のようにoffsetに固定値を設定すると画面に値は表示されます。 --%> <logic:iterate id="shohinId" name="DvdRentalSearchForm" offset="<%=i*4 %>" length="4" property="shohinInfoList" indexId="index"> <%-- ↑上記のようにoffsetにスクリプトレットの式を設定すると画面が表示されなくなります。 --%> <bean:write name="shohinId" property="titleName" /> </logic:iterate> </tr> <% } %> ============================================================================================================================================= 急ぎ解決したい為、何卒ご協力下さりますよう よろしくお願い致します。

  • Struts、Iterateタグの使い方

    StrutsのIterateタグを使おうとしているのですが、 jsp.error.unterminated.tagというエラーが出てしまい ます。Iterateタグの使い方に問題があると思うのです が、どのように対処すれば良いのかが分かりません。ご 存知の方、教えて頂けませんでしょうか。お願いしま す。 <%@ page language="java" import="java.util.Collection, aloha.business.UserBO" %> <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> <jsp:include page="header.jsp" flush="true" /> <% UserBO UserBO = new UserBO(); Collection col = userBO.findAllUser(); %> <table><tr> <logic:iterate id="user", name="col", length="5"> </logic:iterate>

    • ベストアンサー
    • Java
  • strutsを使用したjspでjavascript関数へ引数を渡す方法

    ご存知の方がおられましたら、教えてください。 struts1.2を使用したJSPで、ボタン押下時にjavascriptの関数に strutsの変数を渡したいのですが、呼ばれないようです。 固定の値を渡すと、きちんと呼ばれます。 下記に例を示します。 <html:html locale="true"> <script type="text/javascript"> function PointAdd(index) { alert('aaa'); } </script> <body> <logic:iterate id="gal" name="gals" type="model.Gal" offset="<%=(String)request.getAttribute("offset") %>" length="10" > <bean:define id="gal_no1" >  <bean:write name="gal" property="gal_no" /> </bean:define> <html:button property="noReAction" value="ポイントUP" onclick="PointAdd(<%= gal_no1 %>)" /> </logic:iterate> </body> </html:html> ご存知の方、おられましたら、 ご指導、よろしくお願いいたします。

  • struts で bean:parameter の指定方法でつまづいています

    いつもお世話になっております。 DBから取得したデータをiterateを使用してボタン表示を行い、ボタンを押されたときのデータを取得しようとしているのですが、 なんともうまくいきません。 1つ前のjavaで、 request.setAttribute("category",cmArray); として定義してあります。 cmArrayはmodelをArrayListに入れたものです。 実際のソースは <logic:iterate id="hyouji" name="category" scope="request"> <html:submit property="submit"><bean:write name="hyouji" property="category_name" /></html:submit> <bean:write name='hyouji' property='category' /> <--デバック用で期待した値がでます。 <bean:write name='hyouji' property='category_sub' /> <--デバック用で期待した値がでます。 <bean:parameter id="strCategory" name="hyouji.category" value="no-name" /> <bean:parameter id="strCategory_sub" name="category_sub" value="no-name2" /> <% System.out.println(strCategory); System.out.println(strCategory_sub); %> </logic:iterate> bean:parameterのnameの所を色々変えて試しているのですが、printlnの所ではvalueに指定した文字が 出てしまう状態です。 タグライブラリを使用せずに、スクリプトレットを使用すれば出来るようになった(OKWaveで解決)のですが、 できればタグライブラリで出来たらと思います。 どなたか分かる方がいましたら、ご教授下さい。

  • Ajaxの結果のページングの方法

    テキストボックスに文字を入力中に情報を検索し、同一ページに非同期で検索結果を表示する ページを作っています。 ページ自体はPHPで、javascript で XmlHttpRequestを使い、データ検索用のPHPに情報を送り 検索用のページで結果を整形するprint文を作り、xmlhttp.responseText で結果を表示しています。 この検索結果をページングしようと思い、 jquery.pagination.js を利用しようと思っております。 http://phpjavascriptroom.com/?t=ajax&p=jquery_plugin_pagenation  (このサイトの下側の物です) 実装してみたところ、なかなか良いところまで行ったのですが、ページを表示した最初の時に、 一件目の結果が反映されません。 ページングで次を押せば二件目が表示され、前のページを押せば一件目の表示がされているので、 結果は取得できているようですが、それぞれの処理のタイミングで、ページロード時に一件目のデータが取得できていないと思っていますが、解決方法が分かりません。 ソースの一部しか載せられませんが、解決方法がお分かりでしたら教えてください。 <!-- 検索のスクリプト --> <script type= "text/javascript"> function createXmlHttpRequest() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else { return null ; } } var xmlhttp = null; var baseTime = new Date(); var c = 0; function query(flg) { var sword = document.getElementById('sword' ).value; var keyword = encodeURI(sword); var elapsed = parseInt((new Date()).getTime() - baseTime.getTime()); baseTime = new Date(); if (elapsed < 200) { return; } if (!xmlhttp) xmlhttp = createXmlHttpRequest(); if (!xmlhttp || xmlhttp.readyState == 1 || xmlhttp.readyState == 2 || xmlhttp.readyState == 3) { return; } if (keyword_save != keyword) { xmlhttp.open( "GET", "search-ajax.php?sword=" + keyword, true); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { document.getElementById( "hiddenresult").innerHTML = xmlhttp.responseText; } } xmlhttp.send( null) keyword_save = keyword; } } window.onload = function() { var sword = document.getElementById("sword" ); if (sword.addEventListener) { sword.addEventListener( "keyup", query, false ) } else { sword.attachEvent( "onkeyup", query); } setInterval( "query('1')", 300); } </script> <!-- ページングのスクリプト --> <script type="text/javascript"> $( function() { function pageselectCallback(page_index, jq){ var new_content = $('#hiddenresult div.result:eq(' +page_index+')').clone(); $( '#res').empty().append(new_content); return false ; } function initPagination() { var num_entries = $('#hiddenresult div.result' ).length; // Create pagination element $( "#Pagination").pagination(num_entries, { num_edge_entries: 2, num_display_entries: 8, callback: pageselectCallback, items_per_page:1 }); } $( function(){ initPagination(); }); }); </script >

  • ページング処理について

    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
  • strutsでのページングについて教えてください。

    strutsでのページングについて教えてください。 最近プログラミングを始めた初心者です。 strutsのカスタムタグを使ってJSPで 前の10件 次の10件というようにページングを行いたいのですが、 どうすればいいのかまったく方法が分からずに困っています。 漠然とした質問で申し訳ないのですが、 どなたか教えて頂けないでしょうか。

    • ベストアンサー
    • Java
  • Collectionからの型変換について

    いつもお世話になっています。 Collectionについてなのですが、 Collection→配列は、可能ですが、 Collection→List,Mapはできないのでしょうか? ためしに、CollectionにList,Mapそれぞれを格納してみると Object[]で、List,Mapそれぞれの値を取得することはできるようなのですが。 以下が実行時のソースです。 //MapからCollection Map map = new HashMap(); map.put("tet","ttt"); map.put("a", "arigato~"); //MapをCollectionに格納する Collection co1 = java.util.Arrays.asList(map); //Object型配列で取得する Object[] ob1 = co1.toArray(); System.out.println(ob1.length + "/" + ob1[0]); //ListからCollection List list = new ArrayList(); list.add("test"); list.add("arigato~"); //ListをCollectionに格納する Collection co2 = java.util.Arrays.asList(list); //Object[]で取得する Object[] ob2 = co2.toArray(); System.out.println(ob2.length + "/ " + ob2[0]); 表示結果: 1/{a=arigato~, tet=ttt} 1/ {a=arigato~, tet=ttt} 宜しくお願いします。

    • ベストアンサー
    • Java
  • 一方の画面の条件に変えられてしまう。

    以下の環境でWebアプリケーションを開発しています。 Java 1.5 Tomcat 5.5 eclipse 3.3 フレームワークは使用しておらずServletとJspです。 二台のPC(AとB)から検索処理を行うことができる画面を開き、 それぞれ異なる検索条件を入力します。 同じタイミングで検索ボタンを押すと Aに入力した検索条件にBが置き換えられ、 検索結果もAの検索結果と同じになってしまいます。 タイミングをずらすと特に問題なく表示されます。 (見た目で問題ないだけで中身は良くないと思っています) どのようなことが原因でこのような現象になるのでしょうか? 同じオブジェクトを参照してしまっているとかでしょうか… JSPの画面が指定しているアクションで以下のサーブレットが呼び出されます。 (かなり省略しています。) public class TestServlet extends HttpServlet { private TestBean testBean = null; public void Post(HttpServlet request, HttpServletResponse) throws ServletException, IOException { ServletContext context = this.getServletContext(); HttpSession session = request.getSession(false); testBean = (TestBean)session.getAttribute("TestBean"); //Logic(検索処理呼び出し) TestLogic logic = new TestLogic(); logic.search(testBean); session.setAttribute("TestBean", testBean); } } logic内では引数のtestBeanにそのまま検索結果を設定しています。

    • ベストアンサー
    • Java
  • DB検索条件を指定したHTMLフォームを検索後も残す方法(JSP)

    首記の件ですこし教えてください。 DBに接続しブラウザ上で検索条件を入力し検索結果が 表示されるJSPを作っています。 検索条件を検索後も保持できるようにしたいです。 スクリプトレットでJavaコードを打ち込んで 実現してみたのですがJSPの本来のやり方として あまりふさわしくないのかと思います。 一般的にはどのような処理をすればよいでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう