Java/JSPのRepeat コントロールについて
前回、Visual C# .NETでRepeaterコントロールを使って、シンプルに繰り返し処理を書く方法を紹介いたしましたが、
今回は、Java/JSPで
※データベースは、MySQLへの接続で説明しています。
Repeatタグ利用の為の準備
1.WebLogic Serverをダウンロードし、その中の ext ディレクトリの weblogic-tags.jar ファイルを、
JSP を格納する Web アプリケーションの WEB-INF/lib ディレクトリにコピーします。
2.このタグ ライブラリ記述子を、Web アプリケーション デプロイメント記述子 (web.xml) の
(※web.xmlは、C#Visual C# .NETでと言う、Web.configのような役割をするファイルです。)
次に例を示します。
<taglib> <taglib-uri>weblogic-tags.tld</taglib-uri> <taglib-location> /WEB-INF/lib/weblogic-tags.jar </taglib-location> </taglib>
表示するデータの内容
表示するデータは以下の3件とします。
データベース名:authors au_id au_name au_from au_hobby icon ------------------------------------------------------------------------- tarou_yamamoto 山本 太郎 日本 旅行 1 hanako_yamamda 山田 花子 日本 映画鑑賞 3 micheal_mead Micheal Mead アメリカ ダンス 2
HelloUserServlet.javaの記述
サーブレットでは、データベースへ接続し、取得したデータをリクエストにセットしています。
import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Vector; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloUserServlet extends HttpServlet { /**HTTP リクエストの処理*/ public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ { String strUrl = ""; try{ // ユーザーのデータを取得 Vector vecUser = getAuthors(); // リクエストにセット request.setAttribute("UserList", vecUser); strUrl = "/jsp/repeat.jsp"; } catch(Exception e){ strUrl = "/jsp/error.jsp"; } finally{ // Jspに対して出力を行う。 ServletContext sc = getServletContext(); sc.getRequestDispatcher(strUrl).forward(request, response); } } /** * データベースに接続し、ユーザ情報を取得 * @return Vector */ private Vector getAuthors() throws Exception{ Connection con = null; PreparedStatement ps = null; Vector vec = new Vector(); try { // データベースへ接続 con = DriverManager.getConnection("jdbc:mysql://localhost/authors","root","root"); // SQL文を作成 String sql = "select * from authors"; // ステートメントオブジェクトを生成 ps = con.prepareStatement(sql); // クエリーを実行して結果セットを取得 ResultSet rs = ps.executeQuery(); HashMap map = new HashMap(); // 検索された行数分ループ while(rs.next()) { // アイコンID名前を取得 map.put("icon", rs.getString("icon")); // 名前を取得 map.put("au_name", rs.getString("au_name")); // 出身地データを取得 map.put("au_from", rs.getString("au_from")); // 趣味を取得 map.put("au_hobby", rs.getString("au_hobby")); // VectorへHashMapをセット vec.add(map); } } catch (SQLException e) { e.printStackTrace(); } finally { try { // close処理 if(ps != null){ ps.close(); } // close処理 if(con != null){ con.close(); } } catch(SQLException e){ e.printStackTrace(); } } return vec; } }
repeat.jspの記述
1.JSP側では、上部でtaglib ディレクティブの使用を宣言します。
2.リクエストから、サーブレットでセットした、ユーザー情報を取得します。
3.for()文を使わないで、シンプルなコードで繰り返し処理を書くことが出来ます。
<!-- 1.taglib ディレクティブを使用を宣言 --> <%@ taglib uri="weblogic-tags.tld" prefix="wl" %> <% // 2.リクエストからデータを取得 Vector vecUser = (Vector)request.getAttribute("UserList"); %> (中略) <table class="p" border="1" cellspacing="0" cellpadding="3" width="25%"> <!-- 項目表示 --> <tr class="ss"> <th>アイコン</th> <th>名前(出身地)</th> <th>趣味</th> </tr> <!-- 3.繰り返し処理部分 start --> <wl:repeat id="record" set="<%= vecUser %>" type="java.util.Vector"> <tr align="center"> <td> <!-- アイコン --> <img src="./img/<%= ((HashMap)record.get(idx)).get("icon").toString() %>.gif"> </td> <td> <!-- 名前 --> <%= ((HashMap)record.get(idx)).get("au_name").toString() %> <!-- 出身地 --> (<%= ((HashMap)record.get(idx)).get("au_from").toString() %>) </td> <td> <!-- 趣味 --> <%= ((HashMap)record.get(idx)).get("au_hobby").toString() %> </td> </tr> <wl:repeat> <!-- 繰り返し処理部分 end --> </table>