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

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

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

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

Q&A

解決済

2回答

2294閲覧

Spring Controllerにformの情報が渡されない

cout

総合スコア13

Spring Boot

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

0グッド

0クリップ

投稿2020/05/10 03:22

編集2020/05/10 04:11

Controllerにformの情報が渡されなくnullなので解決したいです。

Form

1public class SearchForm { 2 private Date datefrom; 3 private Date dateto; 4 5 public Date getDatefrom() { 6 return datefrom; 7 } 8 public void setDatefrom(Date datefrom) { 9 this.datefrom = datefrom; 10 } 11 public Date getDateto() { 12 return dateto; 13 } 14 public void setDateto(Date dateto) { 15 this.dateto = dateto; 16 } 17} 18 19

HTML

1<form method="post" action="/searchresult" 2 th:object="${searchForm}"> 3 <table border="1"> 4 <tr> 5 <th>日付</th> 6 </tr> 7 <tr> 8 <td>From<input type="text" id="datefrom" name="datefrom"> 9 ~To<input type="text" id="dateto" name="dateto"> 10 </td> 11 </tr> 12 </table> 13 <input type="submit" id='search' value="検索"> 14 </form>

Controller

1@PostMapping("/searchresult") 2 public ModelAndView searchresult(@ModelAttribute("searchForm") SearchForm form,BindingResult result, 3 ModelAndView mav,Search entity){ 4if(result.hasErrors()) { 5 return mav; 6} 7    mav.setViewName("searchresult"); 8 mav.addObject("searchForm", new SearchForm()); 9    Iterable<Kakeibo> list = service.searchAll(form); 10   mav.addObject("datalist", list); 11 return mav; 12 }

イメージ説明

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

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

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

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

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

m.ts10806

2020/05/10 03:41

どう入力してますか?
m.ts10806

2020/05/10 03:44

あとこのままコピペではビルド通らないコードです。 最低限、エラーの出ないコードを提示してください。
cout

2020/05/10 04:12

修正しました。
m.ts10806

2020/05/10 04:25

hasErrors()はtrueなのでしょうか。どのように「NULL」ということを確認しましたか?
cout

2020/05/10 04:35

trueです。 hasErrors()の行にブレークポイントを置いてデバッグで確認しました。
m.ts10806

2020/05/10 06:15 編集

(2回目・・・) このままコピペではビルド通らないコードです。 最低限、エラーの出ないコードを提示してください。 (Kakeibo とかserviceも) 全角スペースもりもり入ってますよ。 実際のコードからコピペして持ってきてください。
guest

回答2

0

ベストアンサー

同コードで同じ文字列打って送信してみましたが、
確かにデバッグではnullってなってますが
イメージ説明

※Kakeiboとserviceは提示されてないので抜いて確認してます。

受け取ったsearchresult.htmlでは表示できました。

html

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8"> 5<title>searchresult</title> 6</head> 7<body> 8 <form th:object="${searchForm}"> 9 <input type="date" th:field="*{datefrom}"> <input type="date" 10 th:field="*{dateto}"> 11 </form> 12</body> 13</html>

イメージ説明

Dateとして正しくない文字列で送信すると空文字渡って下記のようになったので、
イメージ説明

正しく動くように思います。

念のため@NotNullをつけてみては?

java

1import java.util.Date; 2 3import javax.validation.constraints.NotNull; 4 5import lombok.Getter; 6import lombok.Setter; 7 8@Getter 9@Setter 10public class SearchForm { 11 @NotNull 12 private Date datefrom; 13 @NotNull 14 private Date dateto; 15}

私はこれでもきちんとsearchresultに渡りました。

投稿2020/05/10 06:43

m.ts10806

総合スコア80875

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

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

cout

2020/05/10 07:47

yyyy/mm/ddの形で送信したら値は受け取れました。 ありがとうございます。
m.ts10806

2020/05/10 07:51

いえ、yyyy-mm-ddで通りますよ。 searchresultの画面キャプチャでyyyy/mm/ddの形式になっているのは、 type="date" だからです。
m.ts10806

2020/05/10 07:52

つまり、「現状のコードでは問題が起きていない」ということを伝えるための回答です。 提示されたコードは全角空白入っていたり問題だらけですけど・・
cout

2020/05/10 10:36

勘違いしていました。 ご指摘ありがとうございます。
guest

0

バリデーションエラー発生した場合は 値がはいっている(チェックなしなのでここはデットコード

mav.addObject("searchForm", new SearchForm());

入力をつぶしてますが、これは正しい動作ですか?

投稿2020/05/10 04:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問