コンテンツにスキップ

第6章 検索

1 DAO

ShouhinDAOに sname を検索するメソッド findBySname を作成します。 これはfindAllを元にしますが、違いは、引数 word があることです。word が検索語となり、これを含む sname を検索します。

public List<Shouhin> findBySname(String word) {

また、SQLではLIKE検索を行います。このとき、wordを%で囲んで、wordを含む後を検索するようにします。

String sql = "SELECT * FROM shouhin WHERE sname LIKE ?";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, "%" + word + "%");

2 フォーム

一覧の上などに検索語を入力するフォームを作成します。

このとき、methodはgetにします。データを書き換えないため、検索処理はgetを使用します。

<form action="search" method="get">
<input type="text" name="word" value="">
<input type="submit" value="検索">
</form>

3 検索処理

SearchServletを作成します。URLは /search とします。

doGetでまず、検索語を受け取ります。

request.setCharacterEncoding("UTF-8");
String word = request.getParameter("word");

そして、wordをDAOで検索します。

ShouhinDAO dao = new ShouhinDAO();
List<Shouhin> list = dao.findBySname(word);

リクエストスコープに検索結果であるlistと検索語wordを渡し、search.jsp にフォワードします。

4 表示

search.jsp ではslist.jspと同じように、一覧を表示します。 ただし、検索フォームには検索語を表示します。

<form action="search" method="get">
<input type="text" name="word" value="${word }">
<input type="submit" value="検索">
</form>

検索結果が無い場合にメッセージを出す場合、c:if を使用し、listが無い場合には、「検索対象がありません」と表示します。検索対象がある場合にのみ、表を表示します。

<c:if test="${ empty list }" >
    <p>検索対象がありません</p>
</c:if>

<c:if test="${ not empty list }" >
    表の表示省略
</c:if>