前提・実現したいこと
閲覧ありがとうございます。
こちらのサイトを参考に、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
を使っています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/04 02:58
2020/11/04 03:36