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

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

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

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

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

4729閲覧

画面遷移が上手くいきません。

senas.tt

総合スコア2

JSP

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

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1グッド

1クリップ

投稿2020/08/19 13:01

編集2020/08/19 13:07

前提・実現したいこと

Spring Bootを使って、簡単な銭湯めぐりのWeb日記帳を制作しています。
トップページ(index.html)から検索画面(search.html)へと遷移したいのですが、
どうも上手くいかず、エラー表示になってしまいます。
index.htmlとsearch.html、コントローラーをチェックして頂きたいです。

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

Spring Boot上でエラーメッセージは出ていないのですが、いざポートにアクセスしてトップ画面から検索をクリックすると
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Aug 19 21:54:29 JST 2020
There was an unexpected error (type=Bad Request, status=400).
と表示されます。

該当のソースコード

html

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8"> 5</head> 6<title>トップページ</title> 7<body> 8<h1>日記</h1> 9<a th:href="@{'/write'}">記録</a> 10<a th:href="@{'/list'}">一覧</a> 11<a th:href="@{'/choice'}">診断</a> 12<a th:href="@{'/search'}">検索</a> 13</body> 14</html>

html

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8"> 5<title>検索画面</title> 6</head> 7<body> 8<form th:action="@{/search}" method="post"> 9<p>検索<input type="text" name="key" /> 10<input type="submit" value="検索"/></p> 11</form> 12</body> 13</html>

java

1package com.example.demo; 2 3import java.util.List; 4import java.util.Optional; 5 6import org.springframework.beans.factory.annotation.Autowired; 7import org.springframework.stereotype.Controller; 8import org.springframework.transaction.annotation.Transactional; 9import org.springframework.web.bind.annotation.ModelAttribute; 10import org.springframework.web.bind.annotation.PathVariable; 11import org.springframework.web.bind.annotation.RequestMapping; 12import org.springframework.web.bind.annotation.RequestParam; 13import org.springframework.web.servlet.ModelAndView; 14 15@Controller 16public class OfuroController { 17 @Autowired 18 OfuroRepository repository; 19 20 @RequestMapping(value = "/") 21 public ModelAndView index(ModelAndView mv) { 22 mv.setViewName("index"); 23 return mv; 24 } 25 26 @RequestMapping("/write") 27 public ModelAndView write(@ModelAttribute("form") OfuroEntity entity, ModelAndView mv) { 28 mv.setViewName("write"); 29 return mv; 30 } 31 32 @RequestMapping(value = "/insert") 33 @Transactional(readOnly = false) 34 public ModelAndView insert(@ModelAttribute("form") OfuroEntity entity, ModelAndView mv) { 35 repository.saveAndFlush(entity); 36 return new ModelAndView("redirect:/list"); 37 } 38 39 @RequestMapping(value = "/list") 40 public ModelAndView list(ModelAndView mv) { 41 mv.setViewName("list"); 42 List<OfuroEntity> list = repository.findAll(); 43 mv.addObject("list", list); 44 return mv; 45 } 46 47 @RequestMapping(value = "/show/{id}") 48 public ModelAndView show(@ModelAttribute OfuroEntity entity, @PathVariable Integer id, ModelAndView mv) { 49 mv.setViewName("show"); 50 Optional<OfuroEntity> show = repository.findById(id); 51 mv.addObject("form", show.get()); 52 return mv; 53 } 54 55 @RequestMapping(value = "/update/{id}") 56 public ModelAndView update(@ModelAttribute OfuroEntity entity, @PathVariable Integer id, ModelAndView mv) { 57 Optional<OfuroEntity> show = repository.findById(id); 58 mv.addObject("form", show.get()); 59 mv.setViewName("update"); 60 return mv; 61 } 62 63 @RequestMapping(value = "/delete/{id}") 64 public ModelAndView delete(@PathVariable Integer id, ModelAndView mv) { 65 mv.setViewName("delete"); 66 Optional<OfuroEntity> show = repository.findById(id); 67 mv.addObject("form", show.get()); 68 return mv; 69 } 70 71 @RequestMapping(value = "/delete") 72 @Transactional(readOnly = false) 73 public ModelAndView remove(@RequestParam("id") Integer id) { 74 repository.deleteById(id); 75 return new ModelAndView("redirect:/list"); 76 } 77 78 79 @RequestMapping(value="/search") 80 public ModelAndView search( 81 @RequestParam("key") String key, ModelAndView mv) { 82 mv.setViewName("search"); 83 List<OfuroEntity> list = repository.findByNameLike("%" + key + "%"); 84 mv.addObject("list", list); 85 return mv; 86} 87}

試したこと

何度も自分なりに書き換えましたが、他の場所もエラーになる一方です。

補足情報(FW/ツールのバージョンなど)

Spring Boot,HTML,CSSを使う課題の一部です。

A-pZ👍を押しています

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

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

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

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

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

m.ts10806

2020/08/19 21:17

本当にJSPですか?Thymeleafでは?
m.ts10806

2020/08/19 21:19

前の質問と同じタイトルです。同じ問題なら似たような解決方法では? 構文ミス、定義してない変数を利用してないか疑ってください。
guest

回答1

0

ベストアンサー

/search のController実装にて

java

1public ModelAndView search( 2 @RequestParam("key") String key, ModelAndView mv)

となっているため、リクエストパラメータ:key が必須項目になっているのですが、リンクを押しただけでは、パラメータ key がないので、400 Bad Requestとなります。

対処法としては2つあります。

(1) 必須パラメータにしない

java

1@RequestParam(value="key", required = false) String key

(2) リンクを押したときと検索したときとで、メソッドを分ける。
検索した際には、formにてmethod="post"と指定されていますので、

java

1import org.springframework.web.bind.annotation.GetMapping; 2import org.springframework.web.bind.annotation.PostMapping; 3 4...(中略)... 5 6@GetMapping(value="/search") 7public ModelAndView searchDisplay(ModelAndView mv) { 8 ...(中略)... 9 return mv; 10} 11 12@PostMapping("/search") 13public ModelAndView search(@RequestParam("key") String key, ModelAndView mv) { 14 ...(中略)... 15 return mv; 16}

個人的には、(2)の方法が良いです。

投稿2020/08/19 22:25

編集2020/08/19 22:26
A-pZ

総合スコア12011

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

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

senas.tt

2020/08/20 02:11

A-pZ様 ご提示いただいたパターン2の方を試し、画面遷移が上手くいきました!!! 助けていただき、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問