質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

1029閲覧

検索結果を表示したい

janetto

総合スコア7

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

2クリップ

投稿2020/10/14 17:16

実現したいこと

使用者番号で検索を行ったときその要素だけが表示されるようにしたい。(1枚目の画像→2枚目のイメージ)

1枚目
イメージ説明

2枚目
イメージ説明

起きたエラー

以下のように検索が機能しない。
イメージ説明

### 解決したいこと
検索機能を使用したい

作成した物

index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:import url="../layout/app.jsp"> <c:param name="content"> <c:if test="${flush != null}"> <div id="flush_success"> <c:out value="${flush}"></c:out> </div> </c:if> <h2>使用者 一覧</h2> <form action="index" method="get"> <p>使用者番号を入力してください。</p> <input type="search" name="search" placeholder="使用者番号を入力"> <input type="submit" name="submit" value="検索"> </form> <table id="user_list"> <tbody> <tr> <th>使用者番号</th> <th>氏名</th> <th>操作</th> </tr> <c:forEach var="user" items="${users}" varStatus="status"> <tr class="row${status.count % 2}"> <td><c:out value="${user.code}" /></td> <td><c:out value="${user.name}" /></td> <td> <c:choose> <c:when test="${user.delete_flag == 1}"> (削除済み) </c:when> <c:otherwise> <a href="<c:url value='/contentstitle/show?id=${user.id}' />">詳細を表示</a> </c:otherwise> </c:choose> </td> </tr> </c:forEach> </tbody> </table> <div id="pagination"> (全 ${users_count} 件)<br /> <c:forEach var="i" begin="1" end="${((users_count - 1) / 15) + 1}" step="1"> <c:choose> <c:when test="${i == page}"> <c:out value="${i}" />&nbsp; </c:when> <c:otherwise> <a href="<c:url value='/contentstitle/index?page=${i}' />"><c:out value="${i}" /></a>&nbsp; </c:otherwise> </c:choose> </c:forEach> </div> <p><a href="<c:url value='/contentstitle/new' />">新規利用者の登録</a></p> </c:param> </c:import>

5番目にある@NamedQuery を使いたい

ContentTitle(DTO)

1ContentTitle(DTO) 2package models; 3import java.sql.Timestamp; 4 5import javax.persistence.Column; 6import javax.persistence.Entity; 7import javax.persistence.GeneratedValue; 8import javax.persistence.GenerationType; 9import javax.persistence.Id; 10import javax.persistence.NamedQueries; 11import javax.persistence.NamedQuery; 12import javax.persistence.Table; 13@Table(name = "contenttitle") 14@NamedQueries({ 15 @NamedQuery( 16 name = "getAllUsers", 17 query = "SELECT e FROM ContentTitle AS e ORDER BY e.id DESC" 18 ), 19 @NamedQuery( 20 name = "getUsersCount", 21 query = "SELECT COUNT(e) FROM ContentTitle AS e" 22 ), 23 @NamedQuery( 24 name = "checkRegisteredCode", 25 query = "SELECT COUNT(e) FROM ContentTitle AS e WHERE e.code = :code" 26 ), 27 @NamedQuery( 28 name = "checkLoginCodeAndPassword", 29 query = "SELECT e FROM ContentTitle AS e WHERE e.delete_flag = 0 AND e.code = :code AND e.password = :pass" 30 ), 31 @NamedQuery( 32 name = "searchRegisterCode", 33 query = "SELECT c FROM ContentTitle AS c WHERE c.code = :code" 34 ) 35}) 36@Entity 37public class ContentTitle { 38 @Id 39 @Column(name = "id") 40 @GeneratedValue(strategy = GenerationType.IDENTITY)//id リソース内での連番 数値型 41 private Integer id; 42 43 @Column(name = "code", nullable = false, unique = true)//code 使用者番号 文字列型 44 private String code; 45 46 @Column(name = "name", nullable = false)//name 使用者名 文字列型 47 private String name; 48 49 @Column(name = "password", length = 64, nullable = false)//password システムへのログインパスワード 文字列型 50 private String password; 51 52 @Column(name = "admin_flag", nullable = false)//admin_flag 管理者権限があるかどうか 数値型(一般:0、メンター:1) 53 private Integer admin_flag; 54 55 @Column(name = "created_at", nullable = false)//created_at 登録日時 日時型 56 private Timestamp created_at; 57 58 @Column(name = "updated_at", nullable = false)//updated_at 更新日時 日時型 59 private Timestamp updated_at; 60 61 @Column(name = "delete_flag", nullable = false)//delete_flag 削除された従業員かどうか 数値型(現役:0、削除済み:1) 62 private Integer delete_flag; 63 64 public Integer getId() { 65 return id; 66 } 67 68 public void setId(Integer id) { 69 this.id = id; 70 } 71 72 public String getCode() { 73 return code; 74 } 75 76 public void setCode(String code) { 77 this.code = code; 78 } 79 80 public String getName() { 81 return name; 82 } 83 84 public void setName(String name) { 85 this.name = name; 86 } 87 88 public String getPassword() { 89 return password; 90 } 91 92 public void setPassword(String password) { 93 this.password = password; 94 } 95 96 public Integer getAdmin_flag() { 97 return admin_flag; 98 } 99 100 public void setAdmin_flag(Integer admin_flag) { 101 this.admin_flag = admin_flag; 102 } 103 104 public Timestamp getCreated_at() { 105 return created_at; 106 } 107 108 public void setCreated_at(Timestamp created_at) { 109 this.created_at = created_at; 110 } 111 112 public Timestamp getUpdated_at() { 113 return updated_at; 114 } 115 116 public void setUpdated_at(Timestamp updated_at) { 117 this.updated_at = updated_at; 118 } 119 120 public Integer getDelete_flag() { 121 return delete_flag; 122 } 123 124 public void setDelete_flag(Integer delete_flag) { 125 this.delete_flag = delete_flag; 126 } 127

doGet以下に問題があるかと考えています。

ContentTitleIndexServlet package controllers.contentstitle; import java.io.IOException; import java.util.List; import javax.persistence.EntityManager; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import models.ContentTitle; import utils.DBUtil; /** * Servlet implementation class ContentsTitleIndexservlet */ @WebServlet("/contentstitle/index") public class ContentsTitleIndexservlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ContentsTitleIndexservlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { EntityManager em = DBUtil.createEntityManager(); int search = 3; int page = 1; try{ search = Integer.parseInt(request.getParameter("search")); page = Integer.parseInt(request.getParameter("page")); } catch(NumberFormatException e) { } List<ContentTitle> users = em.createNamedQuery("getAllUsers", ContentTitle.class) .setFirstResult(15 * (page - 1)) .setMaxResults(15) .getResultList(); long users_count = (long)em.createNamedQuery("getUsersCount", Long.class) .getSingleResult(); em.close(); request.setAttribute("search", search); request.setAttribute("users", users); request.setAttribute("users_count", users_count); request.setAttribute("page", page); if(request.getSession().getAttribute("flush") != null) { request.setAttribute("flush", request.getSession().getAttribute("flush")); request.getSession().removeAttribute("flush"); } RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/contentstitle/index.jsp"); rd.forward(request, response); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/10/14 21:25

「機能しない」だと起きている現象が今一つ伝わりません。 処理はどこまで通っているのか?などデバッグしてください。
guest

回答1

0

ベストアンサー

パラメータ:searchを受け取っていますが、後続のクエリを実行する箇所で、常にgetAllUsersを実行しているのが原因です。

java

1List<ContentTitle> users = em.createNamedQuery("getAllUsers", ContentTitle.class)

searchの値に正しく数値が入った場合は、クエリを切り替えれば良いかと。

投稿2020/10/15 00:08

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問