サーブレットで表の表示を行う方法

このQ&Aのポイント
  • サーブレットで表を表示する際に、whileループ内でテーブルを閉じずに綺麗に表示する方法について説明します。
  • テーブルをwhileループの外に移動せずに、一つの表で複数のデータを表示する方法について解説します。
  • Java初心者でも簡単に実装できるout.printを使用した、サーブレットでの綺麗な表の作成方法について説明します。
回答を見る
  • ベストアンサー

サーブレットで表を表示しましたが、上手くいきません

まず、ソースコードです。 PrintWriter out=response.getWriter(); out.print("<table border='1'>"); out.print("<tr><td>"+"行き先"+"</td><td>"+"目的地"+"</td><td>"+"回数"+"</td></tr>"); Iterator<String> ir = hsFlow.keySet().iterator(); while(ir.hasNext()){ String f = ir.next(); Integer c = hsFlow.get(f); if(c==null) c = new Integer(0); out.print("<tr><td>"+f+"</td><td>"+c.intValue()+"回"+"</td><td></tr>"); out.print("<table>"); } <<質問>> プログラムは、複数ある場所の行き来の回数を表示するものです。 そこで、 out.print("<tr><td>"+"行き先"+"</td><td>"+"目的地"+"</td><td>"+"回数"+"</td></tr>"); を見出しに、 out.print("<tr><td>"+f+"</td><td>"+c.intValue()+"回"+"</td><td></tr>"); をデータとして、表示したいのですが、きれいな表を作れません。 分かっていますが、テーブルをwhile(ir.hasNext()){の外に出し見出しを設置すると、最初のデータしか表に入らないで、2つ目以降のデータは表の外に出されてしまいます。 (一つの表で綺麗に表示したいのに、1行ごとに表が閉じられてしまいます。) どうすれば綺麗な表を作れるでしょうか。 なお、JTableの使用は難しいので考えていません。(Java初心者です) あくまで、out.printで表示したいと思います。 ご回答よろしくお願いします。

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

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 while内にある out.print("<table>"); が悪さしていませんか? 2行目以降のデータが出てしまう原因だと思います。 出力されるHTMLを追ってみると 最初にテーブル開始タグとヘッダー部が出力され、データ部の1回目が出力された後に<table>というタグが出力されてしまっています。 out.println("<table>"); out.println("<tr><td>タイトル</td></tr>"); while(条件) { out.println("<tr><td>データ</td></tr>"); } out.println("</table>"); のようにテーブルの開始タグとヘッダー部の定義とテーブルの終了タグをwhileの前後に出力するようにすれば良いのではないでしょうか。

tsa63688
質問者

お礼

早速のご回答に感謝します。 本当ですね・・・ 初歩的なミスのようです。 書き換えたら正常に表示されました。 ありがとうございました!

関連するQ&A

  • 配列を大きい順にソートしたいのですが・・・

    次の配列のc.intValue()が回数表示されるのですが、 あまりにデータが多いため、見やすくするために数が大きい順に表示したいと思います。 for文でlengthを求め・・・って言うのは分かるのですが、 c.intValue()で表示にしているので、どう書けばいいか分かりません。 以下ソースです。 ・・・・・ HashMap<String,Integer> hsFlow = new HashMap<String,Integer>(); <中略> Iterator<String> ir = hsFlow.keySet().iterator(); while(ir.hasNext()){ String f = ir.next(); Integer c = hsFlow.get(f); if(c==null) c = new Integer(0); System.out.println("経路"+f+":"+c.intValue()+"回"); 具体的なソースコードを教えていただけると嬉しいです。 ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • Java。以下のソースをご覧下さい。

    配列ですが、現在の一覧表示を上位10件で表示したいのですが、教わって書いたソースのため、どう手をくわえればいいか分かりません・・・ ご教示お願いします。 //以下ソースです。ほぼ表示ロジックのみですが、足りなければ別途追記致します。 <前略> Iterator<String> ir = hsFlow.keySet().iterator(); while(ir.hasNext()){ ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(); list.addAll((new HashMap<String,Integer>(hsFlow)).entrySet()); Collections.sort(list,Collections.reverseOrder(new SampleSorter())); for(Map.Entry<String,Integer> m:list){ System.out.println(m.getKey()); System.out.println(m.getValue()); String f = ir.next(); Integer c = hsFlow.get(f); if(c==null) c = new Integer(0); System.out.println("回数"+f+":"+c.intValue()+"回"); //この回数表示の部分で回数の多い上位10件のみの表示にしたいと思っています。

    • ベストアンサー
    • Java
  • 表の枠組み表示

    下記、ソースで表から表へデータを飛ばしています。 textboxに入力した値を別のファイルで受け取り 同じような表内で表示しています。 text入力したデーターがないときにも受け取り側の 表の枠組みだけは、表示させたいのですが 何か良い方法ないでしょうか? //送り側ソース <html> <head><title>session.html</title></head> <body> 商品登録 <form action="register.php" method="post"> <table border="1"> <tr> <td><input type="text" name="syouhin"></td> <td><input type="text" name="conto"></td> <td><input type="text" name="thank"></td> </tr> <tr> <td><input type="text" name="xyz"></td> <td><input type="text" name="opq"></td> <td><input type="text" name="stu"></td> </tr> </table> <input type="submit" value="登録"> </body> </html> //受け取り側ソース <?php session_start(); ?> <html> <head><title>register.php</title></head> <body> <?php $syouhin=$_POST['syouhin']; $_SESSION['syouhin'].=$_POST['syouhin']; $conto=$_POST['conto']; $_SESSION['conto'].=$_POST['conto']; $thank=$_POST['thank']; $_SESSION['thank'].=$_POST['thank']; $xyz=$_POST['xyz']; $_SESSION['xyz'].=$_POST['xyz']; $opq=$_POST['opq']; $_SESSION['opq'].=$_POST['opq']; $stu=$_POST['stu']; $_SESSION['stu'].=$_POST['stu']; print("次の商品を登録しました<br />"); print "<table border=1>"; print"<tr><td width=50>適用</td><td width=50>商品</td><td width=50>数量</td></tr>"; print"<tr><td width=50>".$syouhin."</td>"; print"<td width=50>".$conto."</td>"; print"<td width=50>".$thank."</td>"; print "</tr>" ; print"<tr><td width=50>".$xyz."</td>"; print"<td width=50>".$opq."</td>"; print"<td width=50>".$stu."</td>"; print "</tr>" ; print "</table>"; ?> </body> </html>

    • 締切済み
    • PHP
  • 1pxの表を重ねたときにその重ねた部分が2pxになってしまいます

    列数が違う表を重ねたのですが重ねた部分が2pxになってしまうので 重ねた部分も1pxで表示させたいのですがどうすればいいのでしょうか? ソースはこちらです <TABLE BORDER="0" WIDTH="400" CELLSPACING="1" CELLPADDING="5" BGCOLOR="#1C79C6"> <TR BGCOLOR="#E3F0FB"> <TD>あ</TD> <TD>い</TD> </TR> <TR BGCOLOR="#E3F0FB"> <TD>う</TD> <TD>え</TD> </TR> </TABLE> <TABLE BORDER="0" WIDTH="400" CELLSPACING="1" CELLPADDING="5" BGCOLOR="#1C79C6"> <TR BGCOLOR="#E3F0FB"> <TD>↑の部分が2pxになるのを防ぎたいです</TD> </TR> </TABLE> 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • テーブルタグで、この様な表を作りたいです

    実は、現在テーブルタグを使って この2つの様な表を作りたいと思います http://firestorage.jp/download/6521d87b9576b05425f88f84f5d1f104da854e59 ちなみに、上記表の赤い線に関しては 分かり易くする為に、線の部分を赤く着色してるだけで 色は付かなくて構いません ただ…この色を付けた状態でも作れるなら 教えて頂ければ、その方法も勉強したいと思います それで、現在は上の表に対しては この様なタグで <table border=1><tr><td>画像</td><td>解説</td><td>画像</td><td>解説</td><td>解説</td></tr><tr><td>画像</td><td>解説</td><td>画像</td><td>解説</td><td>解説</td></tr><tr><td>解説</td><td>解説</td></tr></table> 下の表に対しては、この様なタグで作りました <table border=1><tr><td></td><td>文字</td><td>文字</td><td>文字</td></tr><tr><td rowspan="2" width="10">文字</td><td>文字</td><td>文字</td><td>文字</td></tr><tr><td>文字</td><td>文字</td><td>文字</td></tr></table> しかし、この場合余計な所にも枠が出来てしまう為 この様な状態で出来上がります http://firestorage.jp/download/a52b36dd5a3f1838a7d482c2c07e68062a846e7b それで、私の知識の範囲では それぞれを単独で作るしか方法が分からず この様に <table border=1><tr><td>文字</td><td>文字</td><td>文字</td><td>文字</td><td>文字</td></tr></tr></tr></table><table border=1><tr><tr><td>文字</td><td>文字</td><td>文字</td></tr></tr></table> 2つに分けて、それぞれを付けるしか分かりません この場合は、この様な表として反映しますが http://firestorage.jp/download/3fe730975c59ffcf275ba5899ea6a385d2c070e8 下の表に関しては分かりませんでした つまり実際の反映としては、こんな感じなんです http://firestorage.jp/download/76d64dcca6e82f11bfa71d3840cf302310e2206a そこで聞きたいんですが 上記の2つの様な表をテーブルタグで作る方法を 教えて頂けないでしょうか?

  • 表の幅・高さ100%表示が、ブラウザによっては見え方が違う事ついて

    初めまして。お世話になります。 現在、ホームページを作成していますが、 分からない事がありますので、質問させて頂きました。 ホームページビルダーで、表(tableタグ)を使ったレイアウトを作成中です。 表の幅(width)と高さ(height)を共に100%で指定し、 表の中をセル(td)で細かく仕切り、その中に画像やテキストを配置し、 レイアウトしたいと思っています。 表のサンプルソースはこんな感じです。細かくてすみません…。 <TABLE border="0" cellpadding="0" cellspacing="0" width="100%" height="100%"> <TR> <TD height="20" colspan="5"></TD> </TR> <TR> <TD height="1" bgcolor="#cccccc" colspan="5"></TD> </TR> <TR> <TD height="30" colspan="5"></TD> </TR> <TR> <TD height="1" bgcolor="#cccccc" colspan="5"></TD> </TR> <TR> <TD colspan="5" height="5"></TD> </TR> <TR> <TD rowspan="3"></TD> <TD rowspan="3" bgcolor="#0000ff" width="1"></TD> <TD height="1" width="700" bgcolor="#0000ff"></TD> <TD rowspan="3" bgcolor="#0000ff" width="1"></TD> <TD rowspan="3"></TD> </TR> <TR> <TD width="700"></TD> </TR> <TR> <TD width="700" height="1" bgcolor="#0000ff"></TD> </TR> </TABLE> 上記のソースでは表の中に、幅700pxの青色の四角いスペースを作っています。 しかし、ブラウザで見え方を確認しますと。 InternetExplorer、Opera、Sleipnirではうまく表示できますが、 Firefox、Lunascapeではうまく表示できません。 高さは大丈夫なのですが、 <TD height="1" width="700" bgcolor="#0000ff"></TD> <TD width="700"></TD> <TD width="700" height="1" bgcolor="#0000ff"></TD>等の、 width="700"が無視され、青色の四角いスペースまでもが、100%表示になってしまいます。 どのようなタグを書けば、どのブラウザでも正しく表示できるようになるのでしょうか? また、Firefox、Lunascapeのバージョンが古いのですが、 これらの影響もあるのでしょうか? Firefoxがバージョン1.5.0.2で、Lunascapeがバージョン3.5.4です。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • 表の中の列の順番を入れ替える場合の表示方法

    HTMLが不慣れで質問が伝わらないかも知れませんが表の表現についてわかる方は教えてください。 例えば、ある表が存在する場合にB列とD列を入れ替えると中身の文字列もそれにしたがって列が入れ替わる表示方法について教えてください。 実際のサンプルHTMLだとこんな感じです↓ <html> <table border="1"> <tr> <th>A</th><th>B</th><th>C</th><th>D</th><th>E</th> </tr> </thead> <tr> <td>AAAAAAA</td> <td>BBBBBBB</td> <td>CCCCCCC</td> <td>DDDDDDD</td> <td>EEEEEEE</td> </tr> <tr> <td>A'A'A'A'A'</td> <td>B'B'B'B'B'</td> <td>C'C'C'C'C'</td> <td>D'D'D'D'D'</td> <td>E'E'E'E'E'</td> </tr> </table> </body> </html>

  • 表の罫線について (印刷)

    行き詰ってしまいましたので、こちらで質問させていただきます。 下記のようなスタイルシートを使用して、表を作成しているのですが、 印刷をすると表の一部の線が消えて出てきません。 印刷の倍率を変えると、消えていた部分が表示され他が消えたりと まちまちです。 /* css ***********************************/ table{   border-collapse:collapse; } table.testTbl td{ border:solid 1px #000; } /* html ***********************************/ <tbale class="testTbl"> <tr> <td height="30" colspan="2">ああああああああああ</td> <td width="220">いいいいいいいい</td> <td>うううううううう</td> </tr> <tr> <td>ああああああああああ</td> <td>いいいいいいいい</td> <td>うううううううう</td>      <td>ええええええええ</td> </tr>         ・         ・         ・         ・        </table> 上記のような感じで表を組んでいるのですが、何か原因はありますでしょうか? print用のcssに table{   border-collapse:separate; } をいれてみたら出るかなと思い、入れたのですが、こちらでも一部が消えてしまいます。 どなたかご教授いただければと思います。 説明がわかりづらく申し訳ありませんが、宜しくお願いいたします。

    • ベストアンサー
    • CSS
  • 配列から表の生成

    はじめまして。 PHP4とMySQLを勉強し始めて半年ほどの初心者です。 DB から重複したデータを除いて以下の様な表をHTMLの<table>タグで 索引のようなページ(表1)を作成しようとしています。 大文字のアルファベットは、見出しタグ<th>を使っています。 (表1) ------------------------- |  A   |  B   |  C   | ------------------------- | a12w4b | bfghj  | cfgjg  | | a243dd | bfffh  |      | | a9ss2s | bglfkg |      | | aa87da |      |      | ------------------------- |  D   |  E   |  F   | ------------------------- | dh125a | easdhf | fabc  | | dksk  | eb12f3 | fddddd | | dx123y | eghjck | fhjkhl | |      | elet  | fxxxcx | |      | ezxczm |      | --------------------------  以下、「Z」まで同様に繰り返し、一つの表で表示。 ・各値の文字列の長さは一定ではありません。 ・各値の最初の文字は、必ず「a」~「z」で始まります。 ・各値の最初の文字以外は、アルファベットと数字がランダムに入ります。 ・各値は重複するものが有りません。(ユニーク値) ・各値の数量は、同じでは有りません。 上記の条件から以下の様に処理しようと考えました。 ---------------------------------------------- distinct を使って値を取り出し  ↓ 配列に格納  ↓ foreach でループ  ↓ ereg でパターンマッチ(先頭文字一致)  ↓ <td>タグ内に値を入れる  ↓ HTML表示 --------------------------------------------- phpのコードは、以下のようにしました。 //test.php echo "<table border=\"1\">"; echo "<tbody>"; echo "<tr>    <th>A</th>    <th>B</th>    <th>C</th>    </tr>"; echo "<tr>"; while($row = mysql_fetch_object($res)){ foreach ($row as $str) { if(ereg ("^a", $str)){ echo "<td>". $str . "</td>"; echo "<td>". $str . "</td>"; echo "<td>". $str . "</td>"; } } echo "</tr>"; } echo "</tbody>"; echo "</table><br>"; が...これでは先頭の文字「a」の値だけが(表2)の様に、同じように3列表示されるだけです。 (当たり前なのですが...) (表2) ------------------------- |  A   |   B  |  C   | ------------------------- | a12w4b | a12w4b | a12w4b | | a243dd | a243dd | a243dd | | a9ss2s | a9ss2s | a9ss2s | | aa87da | aa87da | aa87da | ------------------------- ereg関数の部分を以下の様にしましたが、見出しの「A」・「B」・「C」に対応せず、うまく表示されません。 foreach ($row as $str) { if(ereg ("^a", $str)){ echo "<td>". $str . "</td>"; } if(ereg ("^b", $str)){ echo "<td>". $str . "</td>"; } if(ereg ("^c", $str)){ echo "<td>". $str . "</td>"; } } また、見出し「A」・「B」・「C」以降の「D」・「E」・「F」、「G」・「H」・「I」、... に対応する値をどの様に取り出し、表示すればよいのかも判りません。 どなたか判る方がいらっしゃれば、ご教授の程宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 複数のCSVファイルを1つの表にして出したい

    あるCSVファイルを、Perl+HTMLで、プラウザに「表」で表示させるようにしました。 しかし、追加で複数のCSVファイルを読み込ませて、同じ表に入れることができません。(今ある表のなかの、$r1,2,3と番号が存在してる以外の空欄になっている表に入れたいのです) どのようにすればいいのか、どなたかお教え下さい!>< ちなみに、今作ってあるものはこんなかんじです。 動作確認済み。 #!/usr/local/bin/perl #----------------------------------- $file = "a.20090504.csv"; #----------------------------------- print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<br><br>\n"; print "<center>\n"; print "<table border=1 >\n"; $days = $file; $days =~ s/a.//g; $days =~ s/.csv//g; open(IN,"$file"); @kasou = <IN>; close(IN); foreach $line (@kasou){ ($r1, $r2, $r3, $r4, $r5, $r6, $r7) = split (/,/, $line); print "<tr>\n"; print "<td>$days</td>\n"; print "<td>$r1</td>\n"; print "<td></td>\n"; print "<td>$r2</td>\n"; print "<td></td>\n"; print "<td></td>\n"; print "<td>$r3</td>\n"; print "<td></td>\n"; print "<td></td>\n"; print "<td>$r4</td>\n"; print "<td>$r5</td>\n"; print "<td>$r6</td>\n"; print "<td>$r7</td>\n"; print "</tr>\n"; } print "</table>\n"; print "</body>\n"; print "</html>\n"; ※ちなみに、これですとCSVファイル名の20050504だけがtrに入るようになっています。これは、こうしたいのでこうしているのですが、繰り返しtrに投入されるようになっているのも気になります。 どうしたら直るでしょうか。

専門家に質問してみよう