質問編集履歴

3

エラー追記

2021/07/23 12:13

投稿

weeno02
weeno02

スコア6

test CHANGED
File without changes
test CHANGED
@@ -8,8 +8,6 @@
8
8
 
9
9
 
10
10
 
11
-
12
-
13
11
  ファイル構成は以下の画像のようになっております(画面からは見切れていますがtemplatesフォルダ内にhtml一式が格納されています)
14
12
 
15
13
  ![イメージ説明](de2d3b2142e2bbaa2bbb66f7a86bb2e3.png)
@@ -120,19 +118,7 @@
120
118
 
121
119
  function MoveCheck() {
122
120
 
123
- if( confirm("更新してもいいですかー?") ) {
124
-
125
- return true;
126
-
127
- }
128
-
129
- else {
121
+ i省略
130
-
131
- alert("更新をやめました。");
132
-
133
- return false;
134
-
135
- }
136
122
 
137
123
  }
138
124
 
@@ -160,17 +146,343 @@
160
146
 
161
147
  ```Java
162
148
 
149
+ 字数制限のため**追記の方にまとめて記載**しました。そちらをご覧ください
150
+
151
+ ```
152
+
153
+
154
+
155
+
156
+
157
+ MySQLの実行結果画像(一部個人情報のため伏せさせていただきますが、ご了承ください)
158
+
159
+ BOOKID:5 のように、title や writer が空欄でもはじかれずにデータベースへ登録されてしまいます
160
+
161
+
162
+
163
+ ![イメージ説明](41f4a9acc0198527a52651db22041856.png)
164
+
165
+ ### 試したこと
166
+
167
+ [https://ti-tomo-knowledge.hatenablog.com/entry/2018/06/14/162616](https://ti-tomo-knowledge.hatenablog.com/entry/2018/06/14/162616)
168
+
169
+
170
+
171
+
172
+
173
+ を参考にinputタグの中身をいじったりもしたのですが現状うまくいっておりません
174
+
175
+
176
+
177
+
178
+
179
+ ### 該当のソースコード
180
+
181
+ 入力フォームへと遷移する
182
+
183
+ ```Java
184
+
185
+ @RequestMapping(value = "/update", method = RequestMethod.POST)
186
+
187
+ public String update(
188
+
189
+ @RequestParam(name = "bookID") int bookID,
190
+
191
+ Model model) {
192
+
193
+ if(loginSessionCheck() == false) {
194
+
195
+ return "index";
196
+
197
+ }
198
+
199
+ model.addAttribute("updateForm", new UpdateForm());
200
+
201
+
202
+
203
+ //更新対象となる書籍情報の取得
204
+
205
+ //ここでは省略させていただきます
206
+
207
+
208
+
209
+ return "update"; //update.htmlへ
210
+
211
+ }
212
+
213
+ ```
214
+
215
+
216
+
217
+
218
+
219
+ 入力フォームから入力完了画面へと遷移する
220
+
221
+ ここで入力フォームにエラーが確認されたら再度入力フォームへ遷移する
222
+
223
+ ```Java
224
+
225
+
226
+
227
+ @RequestMapping(value = "/updateResult", method = RequestMethod.POST)
228
+
229
+ public String updateResult(
230
+
231
+ @Validated
232
+
233
+ @RequestParam(name = "updated") Timestamp updated,
234
+
235
+ @RequestParam(name = "bookID") int bookID,
236
+
237
+ @RequestParam(name = "title") String title,
238
+
239
+ @RequestParam(name = "writer") String writer,
240
+
241
+ @RequestParam(name = "publisher") String publisher,
242
+
243
+ @RequestParam(name = "price") int price,
244
+
245
+ @RequestParam(name = "bought") Date bought,
246
+
247
+ @RequestParam(name = "mngDept") String mngDept,
248
+
249
+ @RequestParam(name = "updatorDept") String updatorDept,
250
+
251
+ @RequestParam(name = "userName") String userName,
252
+
253
+ @ModelAttribute UpdateForm updateForm,
254
+
255
+ BindingResult result,
256
+
257
+ Model model) {
258
+
259
+ if(loginSessionCheck() == false) {
260
+
261
+ return "index";
262
+
263
+ }
264
+
265
+ //エラー内容をリストに詰めてupdate画面側に返却します
266
+
267
+ System.out.println("result = " + result);
268
+
269
+ if (result.hasErrors() == true) {
270
+
271
+ List<String> errorList = new ArrayList<String>();
272
+
273
+ for (ObjectError error : result.getAllErrors()) {
274
+
275
+ errorList.add(error.getDefaultMessage());
276
+
277
+ }
278
+
279
+ model.addAttribute("validationError", errorList);
280
+
281
+ return "update";
282
+
283
+ }
284
+
285
+
286
+
287
+ //書籍情報の更新作業を実施
288
+
289
+ //ここでは省略させていただきます
290
+
291
+
292
+
293
+ return "updateResult";
294
+
295
+ }
296
+
297
+ ```
298
+
299
+ ### 補足情報(FW/ツールのバージョンなど)
300
+
301
+
302
+
303
+ Spring Boot 2.5.2
304
+
305
+ お手数ですがご教授お願い致します。
306
+
307
+
308
+
309
+
310
+
311
+ ###追記
312
+
313
+ Contoroller部分、HTML部分, JavaのForm部分を以下のように書き換えたのですがうまく動きませんでした(例外スローされてしまう)。
314
+
315
+
316
+
317
+ Controller
318
+
319
+ ```JAVA
320
+
321
+ @RequestMapping(value = "/updateResult", method = RequestMethod.POST)
322
+
323
+ public String updateResult(
324
+
325
+ /*リクエストパラメタ一式を削除*/
326
+
327
+ @ModelAttribute
328
+
329
+ @Validated UpdateForm updateForm,
330
+
331
+ BindingResult result,
332
+
333
+ Model model) {
334
+
335
+ if(loginSessionCheck() == false) {
336
+
337
+ return "index";
338
+
339
+ }
340
+
341
+ //エラー内容をリストに詰めてupdate画面側に返却します
342
+
343
+ System.out.println("result = " + result);
344
+
345
+ if (result.hasErrors() == true) {
346
+
347
+ List<String> errorList = new ArrayList<String>();
348
+
349
+ for (ObjectError error : result.getAllErrors()) {
350
+
351
+ errorList.add(error.getDefaultMessage());
352
+
353
+ }
354
+
355
+ model.addAttribute("validationError", errorList);
356
+
357
+ return "update";
358
+
359
+ }
360
+
361
+
362
+
363
+ /*書籍更新処理 ここでは省略させていただきます*/
364
+
365
+
366
+
367
+ return "updateResult";
368
+
369
+ }
370
+
371
+ ```
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+ HTML
380
+
381
+ ```HTML
382
+
383
+
384
+
385
+ <table>
386
+
387
+ <tr th:if="${validationError}" th:each="error : ${validationError}">
388
+
389
+ <td style="color: red;" th:text="${error}"></td>
390
+
391
+ </tr>
392
+
393
+ </table>
394
+
395
+
396
+
397
+ <form th:method="POST" th:action=@{/updateResult} onSubmit="return MoveCheck()" th:object="${updateForm}">
398
+
399
+ 書籍ID(自動入力) <p style="display:inline;" th:text="${book.bookID}"></p><br>
400
+
401
+ <br>
402
+
403
+ タイトル: <input type="text" th:name="title" th:id="title" th:value="${book.title}" placeholder="">
404
+
405
+ <br>
406
+
407
+ 著者: <input type="text" th:value="${book.writer}" placeholder="" th:name="writer" th:id="writer">
408
+
409
+ <br>
410
+
411
+ 出版社: <input type="text" th:value="${publisher.publisherName}" placeholder="" th:name="publisher" th:id="publisherr">
412
+
413
+ <br>
414
+
415
+ 価格: <input type="number" th:value="${book.price}" placeholder="" th:name="price" th:id="price">
416
+
417
+ <br>
418
+
419
+ 購入日: <input type="date" th:value="${book.bought}" placeholder="" th:name="bought" th:id="bought" min="1900-01-01" max="2021-12-31">
420
+
421
+ <br>
422
+
423
+ 書籍管理部門: <input type="text" th:value="${department.deptName}" placeholder="" th:name="mngDept" th:id="mngDept">
424
+
425
+ <br>
426
+
427
+ 更新日(自動入力)<p style="display:inline;" th:name="Timestamp" th:id="Timestamp" th:text="${#calendars.format(#calendars.createNowForTimeZone('Asia/Tokyo'), 'yyyy-MM-dd HH:mm:ss')}"></p><br>
428
+
429
+ <br>
430
+
431
+ 更新者(自動入力) <p style="display:inline;" th:name="userName" th:id="userName" th:text="${user.name}"></p><br>
432
+
433
+ <br>
434
+
435
+ 更新者部署(自動入力) <p style="display:inline;" th:name="updatorDept" th:id="tupdatorDept" th:text="${department.deptName}"></p><br>
436
+
437
+ <br>
438
+
439
+
440
+
441
+ <button type="button" onclick="history.back()">戻る</button>
442
+
443
+ <input type="hidden" th:id="bookID" th:name="bookID" th:value="${book.bookID}">
444
+
445
+
446
+
447
+ <input type="submit" value="更新する">
448
+
449
+ </form>
450
+
451
+
452
+
453
+ <script>
454
+
455
+ function MoveCheck() {
456
+
457
+ 省略
458
+
459
+ }
460
+
461
+
462
+
463
+ ```
464
+
465
+
466
+
467
+ FORM部分
468
+
469
+ ```JAVA
470
+
163
471
  import java.io.Serializable;
164
472
 
473
+ import java.sql.Timestamp;
474
+
165
- import java.sql.Date;
475
+ import java.util.Date;
476
+
477
+
478
+
166
-
479
+ import javax.validation.constraints.Min;
167
-
168
480
 
169
481
  import javax.validation.constraints.NotBlank;
170
482
 
171
483
  import javax.validation.constraints.NotEmpty;
172
484
 
173
- import javax.validation.constraints.Pattern;
485
+ import javax.validation.constraints.NotNull;
174
486
 
175
487
  import javax.validation.constraints.Size;
176
488
 
@@ -206,19 +518,15 @@
206
518
 
207
519
 
208
520
 
209
- @NotEmpty(message = "値段を入力してね")
521
+ @NotNull(message = "値段を入力してね")
210
-
522
+
211
- @Size(min = 2, max = 16, message = "値段は2ケタ以上16ケタ以内で入力してください")
523
+ @Min(value = 10, message = "{value}以上の値を設定してください")
212
-
213
- @Pattern(regexp = "[0-90-9]{1,16}", message = "数字で入力してください")
524
+
214
-
215
- private int price;
525
+ private Integer price;
216
-
217
-
218
-
526
+
527
+
528
+
219
- @NotEmpty(message = "購入年月日を入力してね")
529
+ @NotNull(message = "購入年月日を入力してね")
220
-
221
- @Pattern(regexp = "19[0-9]{2}|20[0-9]{2})/([1-9]|1[0-2])/([1-9]|[12][0-9]|3[01]", message = "1900/1/1 ~ 2099/12/31で入力してください")
222
530
 
223
531
  private Date bought;
224
532
 
@@ -230,13 +538,23 @@
230
538
 
231
539
 
232
540
 
233
-
541
+ private String updatorDept;
542
+
543
+
544
+
234
-
545
+ private String userName;
546
+
547
+
548
+
549
+ private int bookID;
550
+
551
+
552
+
235
- //getter/setter の定義
553
+ private Timestamp updated;
236
-
554
+
555
+
556
+
237
- //ここでは省略させていただきます
557
+ /* getter/setter は省略させていただきます */
238
-
239
-
240
558
 
241
559
  }
242
560
 
@@ -246,192 +564,24 @@
246
564
 
247
565
 
248
566
 
249
- MySQLの実行結果画像(一個人情報ため伏せさせていただきますが、ご了承ください)
250
-
251
- BOOKID:5 のように、title writer空欄でもはじれずにデータベースへ登録されてます
252
-
253
-
254
-
255
- ![イメージ説明](41f4a9acc0198527a52651db22041856.png)
256
-
257
- ### 試したこと
258
-
259
- [https://ti-tomo-knowledge.hatenablog.com/entry/2018/06/14/162616](https://ti-tomo-knowledge.hatenablog.com/entry/2018/06/14/162616)
260
-
261
- [https://www.it-swarm-ja.com/ja/thymeleaf/thymeleaf%EF%BC%9Ath%EF%BC%9Afield%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%80%81th%EF%BC%9Avalue%E3%81%AF%E7%84%A1%E8%A6%96%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99/1049938376/](https://www.it-swarm-ja.com/ja/thymeleaf/thymeleaf%EF%BC%9Ath%EF%BC%9Afield%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%80%81th%EF%BC%9Avalue%E3%81%AF%E7%84%A1%E8%A6%96%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99/1049938376/)
262
-
263
-
264
-
265
- を参考にinputタグの中身をいじったりもしたのですが現状うまくいっておりません
266
-
267
-
268
-
269
- た、
270
-
271
- th:field = "*{title}"や、th:field = "*{writer}"
272
-
273
-
274
-
275
- だと入力フォームにBookの情報が表示されなくなってしまう
276
-
277
-
278
-
279
-
280
-
281
-
282
-
283
- ### 該当のソースコード
284
-
285
- 入力フォームへと遷移する
286
-
287
- ```Java
288
-
289
- @RequestMapping(value = "/update", method = RequestMethod.POST)
290
-
291
- public String update(
292
-
293
- @RequestParam(name = "bookID") int bookID,
294
-
295
- Model model) {
296
-
297
- if(loginSessionCheck() == false) {
298
-
299
- return "index";
300
-
301
- }
302
-
303
- model.addAttribute("updateForm", new UpdateForm());
304
-
305
-
306
-
307
- //更新対象となる書籍情報の取得
308
-
309
- //ここでは省略させていただきます
310
-
311
-
312
-
313
- return "update"; //update.htmlへ
314
-
315
- }
316
-
317
- ```
318
-
319
-
320
-
321
-
322
-
323
- 入力フォームから入力完了画面へと遷移する
324
-
325
- ここで入力フォームにエラーが確認されたら再度入力フォームへ遷移する
326
-
327
- ```Java
328
-
329
- /**
330
-
331
- * 書籍情報更新完了画面へ遷移
332
-
333
- * @param updated 更新完了時刻
334
-
335
- * @param bookID 書籍ID
336
-
337
- * @param title 書籍題目
338
-
339
- * @param writer 書籍著者
340
-
341
- * @param publisher 書籍出版社
342
-
343
- * @param price 書籍値段
344
-
345
- * @param bought 書籍購入日時
346
-
347
- * @param mngDept 書籍管理担当部署
348
-
349
- * @param updatorDept 更新者の部署名
350
-
351
- * @param userName 更新者名
352
-
353
- * @param model
354
-
355
- * @return 更新完了画面 or ログイン画面
356
-
357
- */
358
-
359
- @RequestMapping(value = "/updateResult", method = RequestMethod.POST)
360
-
361
- public String updateResult(
362
-
363
- @Validated
364
-
365
- @RequestParam(name = "updated") Timestamp updated,
366
-
367
- @RequestParam(name = "bookID") int bookID,
368
-
369
- @RequestParam(name = "title") String title,
370
-
371
- @RequestParam(name = "writer") String writer,
372
-
373
- @RequestParam(name = "publisher") String publisher,
374
-
375
- @RequestParam(name = "price") int price,
376
-
377
- @RequestParam(name = "bought") Date bought,
378
-
379
- @RequestParam(name = "mngDept") String mngDept,
380
-
381
- @RequestParam(name = "updatorDept") String updatorDept,
382
-
383
- @RequestParam(name = "userName") String userName,
384
-
385
- @ModelAttribute UpdateForm updateForm,
386
-
387
- BindingResult result,
388
-
389
- Model model) {
390
-
391
- if(loginSessionCheck() == false) {
392
-
393
- return "index";
394
-
395
- }
396
-
397
- //エラー内容をリストに詰めてupdate画面側に返却します
398
-
399
- System.out.println("result = " + result);
400
-
401
- if (result.hasErrors() == true) {
402
-
403
- List<String> errorList = new ArrayList<String>();
404
-
405
- for (ObjectError error : result.getAllErrors()) {
406
-
407
- errorList.add(error.getDefaultMessage());
408
-
409
- }
410
-
411
- model.addAttribute("validationError", errorList);
412
-
413
- return "update";
414
-
415
- }
416
-
417
-
418
-
419
- //書籍情報の更新作業を実施
420
-
421
- //ここでは省略させていただきます
422
-
423
-
424
-
425
- return "updateResult";
426
-
427
- }
428
-
429
- ```
430
-
431
- ### 補足情報(FW/ツールのバージョンなど)
432
-
433
-
434
-
435
- Spring Boot 2.5.2
436
-
437
- お手数ですがご教授お願い致します。
567
+ エラー文 必要そうなみ抜粋
568
+
569
+ (boughtを String から Date に変換できない、と15行目のbookIDかしいという指摘?)
570
+
571
+
572
+
573
+ ```
574
+
575
+ Field error in object 'updateForm' on field 'bought': rejected value [2020-12-13]; codes [typeMismatch.updateForm.bought,typeMismatch.bought,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [updateForm.bought,bought]; arguments []; default message [bought]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'bought'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull java.util.Date] for value '2020-12-13'; nested exception is java.lang.IllegalArgumentException]
576
+
577
+ 2021-07-23 20:57:28.304 ERROR 18044 --- [nio-8082-exec-5] org.thymeleaf.TemplateEngine  : [THYMELEAF][http-nio-8082-exec-5] Exception processing template "update": Exception evaluating SpringEL expression: "book.bookID" (template: "update" - line 15, col 39)
578
+
579
+
580
+
581
+ org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "book.bookID" (template: "update" - line 15, col 39)
582
+
583
+ ```
584
+
585
+
586
+
587
+ 2つ目のエラーのbookID部分がいいち理解できておりません・・

2

言葉の変更

2021/07/23 12:13

投稿

weeno02
weeno02

スコア6

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- **Thymeleaf のバリデーションチェックで、元の値をhtmlの入力フォームに表示させつつ新たに入力された値が適切かどうかを判定したい**です
7
+ **Thymeleaf を用いているJavaのバリデーションチェックで、元の値をhtmlの入力フォームに表示させつつ新たに入力された値が適切かどうかを判定したい**です
8
8
 
9
9
 
10
10
 

1

一部文字を強調しました

2021/07/22 06:51

投稿

weeno02
weeno02

スコア6

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- Thymeleaf のバリデーションチェックで、元の値をhtmlの入力フォームに表示させつつ新たに入力された値が適切かどうかを判定したい
7
+ **Thymeleaf のバリデーションチェックで、元の値をhtmlの入力フォームに表示させつつ新たに入力された値が適切かどうかを判定したい**です
8
8
 
9
9
 
10
10