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

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

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

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

HTML

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

Spring Boot

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

Q&A

解決済

1回答

3802閲覧

チェックボックスが未選択の際の処理

ari.naiha

総合スコア2

Java

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

HTML

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

Spring Boot

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

0グッド

0クリップ

投稿2020/11/04 01:54

前提・実現したいこと

閲覧ありがとうございます。

こちらのサイトを参考に、springbootとMySQLを用いて、データベースから条件に合うものを検索するプログラムを作成しようとしています。
テキスト入力での検索を行うことはできたので、チェックボックス形式で検索を出来るように書き換えていたところ、うまくいかないところがあったので質問させていただきます。

勉強を始めたばかりで、要領を得ないところが多いかと思いますが、ご容赦ください。

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

チェックボックスをなにも選択しないと、

Required String parameter 'week' is not present

と表示され、検索を行うことができません。

該当のソースコード

どこで詰まっているのかがピンとこないので、いくつかのコードを載せさせていただきます。

java

1//Search.javaの内容 2package search.entity; 3 4import javax.persistence.Column; 5import javax.persistence.Entity; 6import javax.persistence.Id; 7import javax.persistence.Table; 8 9 10@Entity 11@Table(name="search") 12public class Search { 13 14 @Id 15 @Column(name="dancer") 16 private String dancer; 17 18 public String getDancer() { 19 return dancer ; 20 } 21 public void setDancer(String dancer) { 22 this.dancer = dancer; 23 } 24 25 @Column(name="team") 26 private String team; 27 28 public String getTeam() { 29 return team; 30 } 31 public void setTeam(String team) { 32 this.team = team; 33 } 34 35 @Column(name="studio") 36 private String studio; 37 38 public String getStudio() { 39 return studio; 40 } 41 public void setStudio(String studio) { 42 this.studio = studio; 43 } 44 45 @Column(name="week") 46 private String week; 47 public String getWeek() { 48 return week; 49 } 50 public void setWeek(String week) { 51 this.week = week; 52 } 53 54 @Column(name="time") 55 private String time; 56 public String getTime() { 57 return time; 58 } 59 public void setTime(String time) { 60 this.time = time; 61 } 62 63 @Column(name="level") 64 private String level; 65 public String getLevel() { 66 return level; 67 } 68 public void setLevel(String level) { 69 this.level = level; 70 } 71 72} 73

Java

1//SearchControllerの内容 2package search.controller; 3 4 5import java.util.List; 6 7import search.entity.Search; 8import search.service.SearchService; 9 10import org.springframework.beans.factory.annotation.Autowired; 11import org.springframework.context.annotation.ComponentScan; 12import org.springframework.stereotype.Controller; 13import org.springframework.ui.Model; 14import org.springframework.web.bind.annotation.RequestMapping; 15import org.springframework.web.bind.annotation.RequestMethod; 16import org.springframework.web.bind.annotation.RequestParam; 17import org.springframework.web.servlet.ModelAndView; 18 19@ComponentScan 20@Controller 21public class SearchController { 22 23 @Autowired 24 public SearchService service; 25 26 @RequestMapping(value = "/search", method = RequestMethod.GET) 27 public String index() { 28 return "search"; 29 } 30 31 @RequestMapping(value = "/search", method = RequestMethod.POST) 32 public ModelAndView index(ModelAndView mav 33 , @RequestParam("dancer") String dancer, @RequestParam("team") String team 34 , @RequestParam("studio") String studio 35 , @RequestParam("week") String week, @RequestParam("time") String time 36 , @RequestParam("level") String level) { 37 mav.setViewName("search"); 38 mav.addObject("dancer", dancer); 39 mav.addObject("team", team); 40 mav.addObject("studio", studio); 41 mav.addObject("week", week); 42 mav.addObject("time", time); 43 mav.addObject("level", level); 44 List<Search> result = service.search(dancer, team, studio, week, time, level); 45 mav.addObject("result", result); 46 mav.addObject("resultSize", result.size()); 47 return mav; 48 } 49 50 51 52 53} 54

Java

1//SearchServiceの内容 2package search.service; 3 4 5import java.util.List; 6 7import search.entity.Search; 8import search.repository.SearchRepository; 9import search.repository.SearchRepositoryCustom; 10 11import org.springframework.beans.factory.annotation.Autowired; 12import org.springframework.stereotype.Service; 13 14@Service 15public class SearchService { 16 @Autowired 17 SearchRepository repository; 18 @Autowired 19 SearchRepositoryCustom repositoryCustom; 20 21 public List<Search> search(String dancer, String team, String studio, String week, String time, String level) { 22 List<Search> result; 23 if ("".equals(dancer) && "".equals(team) && "".equals(studio) && "".equals(week) && "".equals(time) && "".equals(level)) { 24 result = repository.findAll(); 25 } else { 26 result = repositoryCustom.search(dancer, team, studio, week, time, level); 27 } 28 return result; 29 } 30 31 32 33} 34

html

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3 <head> 4 <title>レッスン検索</title> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 6 </head> 7 <body> 8 <form method="post" name="form1"> 9 <table> 10 <tr><td>ダンサー名 : <input type="text" class="form-control" name="dancer" th:value="${dancer}"/></td></tr> 11 <tr><td>チーム名 : <input type="text" class="form-control" name="team" th:value="${team}"/></td></tr> 12 <tr><td>スタジオ名 : <input type="text" class="form-control" name="studio" th:value="${studio}"/></td></tr> 13 14 <tr><td>曜日 : 15 <input type="checkbox" class="form-control" id="week" name="week" th:value="月曜日"/><label for="checkbox">月曜日</label> 16 <input type="checkbox" class="form-control" id="week" name="week" th:value="火曜日"/><label for="checkbox">火曜日</label> 17 <input type="checkbox" class="form-control" id="week" name="week" th:value="水曜日"/><label for="checkbox">水曜日</label> 18 <input type="checkbox" class="form-control" id="week" name="week" th:value="木曜日"/><label for="checkbox">木曜日</label> 19 <input type="checkbox" class="form-control" id="week" name="week" th:value="金曜日"/><label for="checkbox">金曜日</label> 20 <input type="checkbox" class="form-control" id="week" name="week" th:value="土曜日"/><label for="checkbox">土曜日</label> 21 <input type="checkbox" class="form-control" id="week" name="week" th:value="日曜日"/><label for="checkbox">日曜日</label> 22 </td></tr> 23 24 <tr><td>時間 : <input type="text" class="form-control" name="time" th:value="${time}"/></td></tr> 25 <tr><td>クラス : <input type="text" class="form-control" name="level" th:value="${level}"/></td></tr> 26 <tr><td><input type="submit" value="検索"/></td></tr> 27 </table> 28 </form> 29 <div th:if="${resultSize > 0}"><label th:text="${resultSize}"></label></div> 30 <table border="1" th:if="${resultSize > 0}"> 31 <tr> 32 <td>ダンサー名</td> 33 <td>チーム名</td> 34 <td>スタジオ名</td> 35 <td>曜日</td> 36 <td>時間</td> 37 <td>クラス</td> 38 </tr> 39 <tr th:each="data : ${result}"> 40 <td th:text="${data.dancer}"/> 41 <td th:text="${data.team}"/> 42 <td th:text="${data.studio}"/> 43 <td th:text="${data.week}"/> 44 <td th:text="${data.time}"/> 45 <td th:text="${data.level}"/> 46 </tr> 47 </table> 48 </body> 49</html>

試したこと

こちらのサイトを参考に、<input type="checkbox"...の前に

html

1<input type="hidden" class="form-control" id="week" name="week" th:value="null"/>

と入れてみたところ、ダンス名での検索など、曜日以外の検索を行うことはできるのですが、曜日は何を入力しても検索ができないという結果になりました。

また、htmlに直接曜日を羅列するのではなく、こちらこちらのように、ControllerクラスでMapを作成してhtmlに表示できるようにしようとしたのですが、こちらはうまくできなかったため、上のようなhtmlコードになっています。

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

Spring Tool Suite 4
springframework.boot' version '2.3.5.RELEASE
Thymereaf
を使っています。

検索画面はこのような形です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Required String parameter 'week' is not present

なので、必須のパラメータがきてないのでしょう。
searchのPOSTをみる限りリクエストパラメータに何も指定がないので全て必須になっているように見受けられます。
きちんとリクエスト渡すか、required=falseをつけて任意にされては?

投稿2020/11/04 02:57

m.ts10806

総合スコア80850

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

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

m.ts10806

2020/11/04 02:58

もちろん「パラメータがこなかった場合の検索条件をどうするか」は決め次第なので、仕様を決めて組んでください。
ari.naiha

2020/11/04 03:36

@RequestParam("week")を、@RequestParam(name="week", required=false)と変更したら、曜日が空欄でも検索ができるようになりました。本当に助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問