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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

2回答

2906閲覧

Springで検索機能を実装したい

TaSa

総合スコア1

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2020/05/21 05:02

編集2020/05/21 05:22

前提・実現したいこと

SpringBootでwebアプリケーションを開発しています。
検索機能を実装したいのですが、うまく実装ができません。
404エラーが表示されますが原因がわかりません。

問題の箇所がわかる方がいらっしゃいましたら、ご教授いただきたいです。

参考にしたサイト
https://dev.classmethod.jp/articles/spring-data-jpa_search/

発生している問題・エラーメッセージ

404エラー

該当のソースコード

HTML

1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html xmlns:th="http://www.thymeleaf.org" 3 xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> 4 <link th:href="@{/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css}" rel="stylesheet"></link> 5 <script th:src="@{/webjars/jquery/1.11.1/jquery.min.js}"></script> 6 <script th:src="@{/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js}"></script> 7<head> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta> 9</head> 10 <body> 11<div th:fragment="search_contents"> 12 <div class="page-header"> 13 <h1>商品検索画面</h1> 14 </div> 15 <form method="post" th:action="@{/search}" th:object="${searchForm}"> 16 <table> 17 <tr><td>商品コード : <input type="text" class="form-control" id="productCode" name="productCode" th:value="${productCode}"/></td></tr> 18 <tr><td>商品名 : <input type="text" class="form-control" id="productName" name="productName" th:value="${productName}"/></td></tr> 19 <tr><td>価格 : <input type="text" class="form-control" id="price" name="price" th:value="${price}"/></td></tr> 20 <tr><td><input type="submit" value="検索"/></td></tr> 21 </table> 22 </form> 23 <div th:if="${resultSize > 0}"><label th:text="${resultSize}"></label>件</div> 24 <table border="1" th:if="${resultSize > 0}"> 25 <tr> 26 <td>商品コード</td> 27 <td>商品名</td> 28 <td>価格</td> 29 </tr> 30 <tr th:each="data : ${result}"> 31 <td th:text="${product.productCode}"/> 32 <td th:text="${product.productName}"/> 33 <td th:text="${product.price}"/> 34 </tr> 35 </table> 36 </div> 37 </body> 38</html> 39

HTML

1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html xmlns:th="http://www.thymeleaf.org" 3 xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> 4<head> 5<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta> 6 7<!-- Bootstrapの設定 --> 8<link th:href="@{/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css}" 9 rel="stylesheet"></link> 10<script th:src="@{/webjars/jquery/1.11.1/jquery.min.js}"></script> 11<script th:src="@{/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js}"></script> 12 13<!-- CSSの読込 --> 14<link th:href="@{/css/home.css}" rel="stylesheet"></link> 15 16<title>Home</title> 17</head> 18<!-- =====ヘッダー(ナビゲーションバー)===== --> 19<body> 20 <!-- ===== ヘッダー(ナビゲーションバー) ===== --> 21 <nav class="navbar navbar-inverse navbar-fixed-top"> 22 <div class="container-fluid"> 23 <div class="navbar-header"> 24 <a class="navbar-brand" href="#">WEBアプリ演習</a> 25 </div> 26 </div> 27 <!-- ===== サイドバー ===== --> 28 <div class="container-fluid"> 29 <div class="row"> 30 <div class="col-sm-2 sidebar"> 31 <ul class="nav nav-pills nav-stacked"> 32 <li role="presentation"><a th:href="@{'/productList'}">商品管理</a> 33 </li> 34 </ul> 35 <ul class="nav nav-pills nav-stacked"> 36 <li role="presentation"><a th:href="@{'/search'}">商品検索</a> 37 </li> 38 </ul> 39 <ul class="nav nav-pills nav-stacked"> 40 <li role="presentation"><a th:href="@{'/signup'}">商品登録</a> 41 </li> 42 </ul> 43 </div> 44 </div> 45 </div> 46 <!-- ===== コンテンツ ===== --> 47 <div class="container-fluid"> 48 <div class="row"> 49 <div class="col-sm-10 col-sm-offset-2 main"> 50 <div th:include="__${contents}__"></div> 51 </div> 52 </div> 53 </div> 54</html>

Controller

1package com.example.demo.controller; 2 3import java.util.List; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.ui.Model; 7import org.springframework.web.bind.annotation.GetMapping; 8import org.springframework.web.bind.annotation.RequestMapping; 9import org.springframework.web.bind.annotation.RequestMethod; 10import org.springframework.web.bind.annotation.RequestParam; 11import org.springframework.web.servlet.ModelAndView; 12 13import com.example.demo.domain.model.Product; 14import com.example.demo.domain.repository.ProductDao; 15import com.example.demo.domain.service.ProductService; 16 17public class SearchController { 18 @Autowired 19 private ProductDao ProductDao; 20 21 @Autowired 22 private ProductService productService; 23 24 @GetMapping("search") 25 public String find() { 26 return "search"; 27 } 28 29 //検索画面のGET用メソッド 30 @GetMapping("/search") 31 public String getHome(Model model) { 32 //コンテンツ部分に検索画面を表示するための文字列を登録 33 model.addAttribute("contents", "/search :: search_contents"); 34 35 return "homeLayout"; 36 } 37 38 @RequestMapping(value = "search", method = RequestMethod.POST) 39 public ModelAndView search(ModelAndView mav, 40 @RequestParam("productCode") String productCode, 41 @RequestParam("productName") String productName, 42 @RequestParam("price") int price) { 43 mav.setViewName("search"); 44 mav.addObject("productCode", productCode); 45 mav.addObject("productName", productName); 46 mav.addObject("price", price); 47 List<Product> result = ProductService.search(productCode, productName, price); 48 mav.addObject("result", result); 49 mav.addObject("resultSize", result.size()); 50 return mav; 51 } 52}

該当のソースコード

repository

1package com.example.demo.domain.repository; 2 3import java.util.List; 4 5import org.springframework.dao.DataAccessException; 6 7import com.example.demo.domain.model.Product; 8 9public interface ProductDao { 10 11 // Productテーブルにデータを1件insert. 12 public int insertOne(Product product) throws DataAccessException; 13 14 // Productテーブルのデータを1件取得 15 public Product selectOne(String productCode) throws DataAccessException; 16 17 // Productテーブルの全データを取得. 18 public List<Product> selectMany() throws DataAccessException; 19 20 // Productテーブルを1件更新. 21 public int updateOne(Product product) throws DataAccessException; 22 23 // Productテーブルを1件削除. 24 public int deleteOne(String productCode) throws DataAccessException; 25 26 public static List<Product> findAll() { 27 return null; 28 } 29 30} 31 32

該当のソースコード

model

1package com.example.demo.domain.model; 2 3import lombok.Data; 4 5@Data 6public class SignupForm { 7 8 private String productCode; 9 private String productName; 10 private int price; 11}

該当のソースコード

jdbc

1package com.example.demo.domain.jdbc; 2 3import java.util.ArrayList; 4import java.util.List; 5import java.util.Map; 6 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.dao.DataAccessException; 9import org.springframework.jdbc.core.JdbcTemplate; 10import org.springframework.stereotype.Repository; 11 12import com.example.demo.domain.model.Product; 13import com.example.demo.domain.repository.ProductDao; 14 15@Repository 16public class ProductDaoJdbcImpl implements ProductDao { 17 18 @Autowired 19 JdbcTemplate jdbc; 20 21 //Productテーブルのデータを1件insert 22 @Override 23 public int insertOne(Product product) throws DataAccessException { 24 //1件登録 25 int rowNumber = jdbc.update("insert into product(productCode," 26 + " productName," 27 + " price)" 28 + " values(?, ?, ?)", product.getProductCode(), product.getProductName(), product.getPrice()); 29 30 return rowNumber; 31 } 32 33 @Override 34 // Productテーブルのデータを1件取得 35 public Product selectOne(String productCode) throws DataAccessException { 36 Map<String, Object> map = jdbc.queryForMap("select * from product" + " where productCode = ?", productCode); 37 38 //結果返却用の変数 39 Product product = new Product(); 40 41 //取得したデータを結果返却用の変数にセットしていく 42 product.setProductCode((String) map.get("productCode")); //商品コード 43 product.setProductName((String) map.get("productName")); //商品名 44 product.setPrice((int) map.get("price")); //値段 45 46 return product; 47 } 48 49 @Override 50 // Productテーブルのデータを全件取得. 51 public List<Product> selectMany() throws DataAccessException { 52 List<Map<String, Object>> getList = jdbc.queryForList("SELECT * FROM product"); 53 //結果返却用の変数 54 List<Product> productList = new ArrayList<Product>(); 55 //取得したデータを結果返却用のListに格納していく 56 for (Map<String, Object> map : getList) { 57 //Productインスタンスの生成 58 Product product = new Product(); 59 60 //Productインスタンスに取得したデータをセットする 61 product.setProductCode((String) map.get("productCode")); //商品コード 62 product.setProductName((String) map.get("productName")); //商品ID 63 product.setPrice((Integer) map.get("price")); //商品ID 64 65 //結果返却用のListに追加 66 productList.add(product); 67 } 68 return productList; 69 } 70 71 @Override 72 // Productテーブルを1件更新. 73 public int updateOne(Product product) throws DataAccessException { 74 //1件更新 75 int rowNumber = jdbc.update("update product" 76 + " set" 77 + " productName = ?," 78 + " price = ?" 79 + " where productCode = ?", product.getProductName(), product.getPrice(), product.getProductCode()); 80 81 return rowNumber; 82 } 83 84 @Override 85 // Productテーブルを1件削除. 86 public int deleteOne(String productCode) throws DataAccessException { 87 //1件削除 88 int rowNumber = jdbc.update("delete from product where productCode = ?", productCode); 89 return rowNumber; 90 } 91} 92

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

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

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

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

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

m.ts10806

2020/05/21 05:32

なにを参考にされたのでしょう。 HTML4で宣言されているようですが
TaSa

2020/05/21 05:41

検索機能を追加する処理や、HTMLの書き方を参考にしました。 HTMLのバージョンは4.01で開発中のため、そちらで宣言しています。
guest

回答2

0

コントローラークラスに@Controllerアノテーションをつけることで解決。

投稿2020/05/21 08:24

TaSa

総合スコア1

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

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

0

自己解決

コントローラークラスに@Controllerアノテーションをつけることで解決。

投稿2020/05/21 07:04

TaSa

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問