第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>