質問編集履歴

10

誤字

2019/05/29 06:02

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -166,7 +166,7 @@
166
166
 
167
167
  <td>
168
168
 
169
- <form th:action="@{'/reservation/' + ${date} + '/' + ${roomId}}" method="post"
169
+ <form th:action="@{'/reservations/' + ${date} + '/' + ${roomId}}" method="post"
170
170
 
171
171
  th:if="${user.userId == reservation.user.userId}">
172
172
 

9

誤字の修正

2019/05/29 06:02

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -166,7 +166,7 @@
166
166
 
167
167
  <td>
168
168
 
169
- <form th:action="@{'/reservation/'> + ${date} + '/' + ${roomId}}" method="post"
169
+ <form th:action="@{'/reservation/' + ${date} + '/' + ${roomId}}" method="post"
170
170
 
171
171
  th:if="${user.userId == reservation.user.userId}">
172
172
 

8

追記

2019/05/29 05:55

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,10 @@
12
12
 
13
13
  ReservableRoom reservable = reservableRoomRepository.findById(reservableRoomId).orElseGet(null);
14
14
 
15
+ 追記4reservableがnullの時ifにひっかかるコードでしたが、ここを!=とした時も同様のエラー、nullかどうかなんて関係なくて追記3の命令を実行するだけでエラー
16
+
17
+
18
+
15
19
  ### 発生している問題・エラーメッセージ
16
20
 
17
21
  ```ここに言語を入力

7

追記

2019/05/28 09:07

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -8,6 +8,10 @@
8
8
 
9
9
  追記2 testのほうをmodel.addAttribute("startTime",reservationForm.getStartTime());に変更してhtmlのほうも${startTime}とすると表示されるようになりました(本来のreserveメソッドのほうは依然としてエラーです)
10
10
 
11
+ 追記3reserveのこの文が原因でした。なにか解決策はないでしょうか?原因がわかる方はおしえてくれたら助かります
12
+
13
+ ReservableRoom reservable = reservableRoomRepository.findById(reservableRoomId).orElseGet(null);
14
+
11
15
  ### 発生している問題・エラーメッセージ
12
16
 
13
17
  ```ここに言語を入力

6

追記

2019/05/28 07:33

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  追記 いわれてみて本当にreservationFormが送られているのか気になったので試してみた結果空白のページが表示され、ここに問題があることがわかりました。
8
8
 
9
+ 追記2 testのほうをmodel.addAttribute("startTime",reservationForm.getStartTime());に変更してhtmlのほうも${startTime}とすると表示されるようになりました(本来のreserveメソッドのほうは依然としてエラーです)
10
+
9
11
  ### 発生している問題・エラーメッセージ
10
12
 
11
13
  ```ここに言語を入力

5

修正

2019/05/28 06:34

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -374,33 +374,81 @@
374
374
 
375
375
 
376
376
 
377
+ ```
378
+
379
+
380
+
381
+ ```
382
+
383
+ test.html
384
+
385
+ <!DOCTYPE html>
386
+
387
+ <html xmlns:th="http://www.thymeleaf.org">
388
+
389
+ <head>
390
+
391
+ <meta charset="UTF-8"/>
392
+
393
+ <title th:text="テスト">テスト</title>
394
+
395
+ </head>
396
+
397
+ <body>
398
+
399
+ <div th:object="${reservationForm}"></div>
400
+
401
+ <span th:text="*{startTime}"></span><br/>
402
+
403
+ <span th:text="*{endTime}"></span><br/>
404
+
405
+ </body>
406
+
407
+ </html>
408
+
409
+ ```
410
+
411
+ ```java
412
+
413
+ ReservationsControllerクラスのreserve()コメント化して以下のメソッド追加
414
+
415
+ String test(@Validated ReservationForm reservationForm,BindingResult bindingResult,
416
+
417
+ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)@PathVariable("date")LocalDate date,
418
+
419
+ @PathVariable("roomId")Integer roomId,Model model) {
420
+
421
+ model.addAttribute("reservationFrom",reservationForm);
422
+
423
+ return "test";
424
+
425
+ }
426
+
427
+ ```
428
+
377
429
  ```ここに言語を入力
378
430
 
379
-
380
-
381
- ```
382
-
383
- test.html
431
+ WEBページ上でのHTML
384
432
 
385
433
  <!DOCTYPE html>
386
434
 
387
- <html xmlns:th="http://www.thymeleaf.org">
435
+ <html>
388
436
 
389
437
  <head>
390
438
 
391
439
  <meta charset="UTF-8"/>
392
440
 
393
- <title th:text="テスト">テスト</title>
441
+ <title>テスト</title>
394
442
 
395
443
  </head>
396
444
 
397
445
  <body>
398
446
 
399
- <div th:object="${reservationForm}"></div>
447
+ <div></div>
400
-
401
- <span th:text="*{startTime}"></span><br/>
448
+
402
-
403
- <span th:text="*{endTime}"></span><br/>
449
+ <span></span><br/>
450
+
451
+ <span></span><br/>
404
452
 
405
453
  </body>
406
454
 
@@ -408,54 +456,6 @@
408
456
 
409
457
  ```
410
458
 
411
- ```java
412
-
413
- ReservationsControllerクラスのreserve()コメント化して以下のメソッド追加
414
-
415
- String test(@Validated ReservationForm reservationForm,BindingResult bindingResult,
416
-
417
- @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)@PathVariable("date")LocalDate date,
418
-
419
- @PathVariable("roomId")Integer roomId,Model model) {
420
-
421
- model.addAttribute("reservationFrom",reservationForm);
422
-
423
- return "test";
424
-
425
- }
426
-
427
- ```
428
-
429
- ```ここに言語を入力
430
-
431
- WEBページ上でのHTML
432
-
433
- <!DOCTYPE html>
434
-
435
- <html>
436
-
437
- <head>
438
-
439
- <meta charset="UTF-8"/>
440
-
441
- <title>テスト</title>
442
-
443
- </head>
444
-
445
- <body>
446
-
447
- <div></div>
448
-
449
- <span></span><br/>
450
-
451
- <span></span><br/>
452
-
453
- </body>
454
-
455
- </html>
456
-
457
- ```
458
-
459
459
  ### 試したこと
460
460
 
461
461
 

4

情報の追記

2019/05/28 02:48

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  フレームワーク Springframework
6
6
 
7
+ 追記 いわれてみて本当にreservationFormが送られているのか気になったので試してみた結果空白のページが表示され、ここに問題があることがわかりました。
8
+
7
9
  ### 発生している問題・エラーメッセージ
8
10
 
9
11
  ```ここに言語を入力
@@ -370,6 +372,88 @@
370
372
 
371
373
  }
372
374
 
375
+
376
+
377
+ ```ここに言語を入力
378
+
379
+
380
+
381
+ ```
382
+
383
+ test.html
384
+
385
+ <!DOCTYPE html>
386
+
387
+ <html xmlns:th="http://www.thymeleaf.org">
388
+
389
+ <head>
390
+
391
+ <meta charset="UTF-8"/>
392
+
393
+ <title th:text="テスト">テスト</title>
394
+
395
+ </head>
396
+
397
+ <body>
398
+
399
+ <div th:object="${reservationForm}"></div>
400
+
401
+ <span th:text="*{startTime}"></span><br/>
402
+
403
+ <span th:text="*{endTime}"></span><br/>
404
+
405
+ </body>
406
+
407
+ </html>
408
+
409
+ ```
410
+
411
+ ```java
412
+
413
+ ReservationsControllerクラスのreserve()コメント化して以下のメソッド追加
414
+
415
+ String test(@Validated ReservationForm reservationForm,BindingResult bindingResult,
416
+
417
+ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)@PathVariable("date")LocalDate date,
418
+
419
+ @PathVariable("roomId")Integer roomId,Model model) {
420
+
421
+ model.addAttribute("reservationFrom",reservationForm);
422
+
423
+ return "test";
424
+
425
+ }
426
+
427
+ ```
428
+
429
+ ```ここに言語を入力
430
+
431
+ WEBページ上でのHTML
432
+
433
+ <!DOCTYPE html>
434
+
435
+ <html>
436
+
437
+ <head>
438
+
439
+ <meta charset="UTF-8"/>
440
+
441
+ <title>テスト</title>
442
+
443
+ </head>
444
+
445
+ <body>
446
+
447
+ <div></div>
448
+
449
+ <span></span><br/>
450
+
451
+ <span></span><br/>
452
+
453
+ </body>
454
+
455
+ </html>
456
+
373
457
  ```
374
458
 
375
459
  ### 試したこと

3

2019/05/28 02:47

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -234,11 +234,7 @@
234
234
 
235
235
  @RequestMapping(method = RequestMethod.POST)
236
236
 
237
- //@Validatedはそのクラスのフィールドにつけた制約に違反していないか確認
237
+
238
-
239
- //上でform作ってからPOSTしてるからこっちはデータが入ったreservationFormインスタンスが渡される,
240
-
241
- //名前は何でもいいかもしんない、型さえあってれば、要確認
242
238
 
243
239
  String reserve(@Validated ReservationForm reservationForm,BindingResult bindingResult,
244
240
 

2

2019/05/27 12:03

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -64,13 +64,13 @@
64
64
 
65
65
 
66
66
 
67
- <!-- action 送信先リンク -->
67
+
68
68
 
69
69
  <form th:object="${reservationForm}"
70
70
 
71
71
  th:action="@{'/reservations/' + ${date} + '/' + ${roomId}}" method = "post">
72
72
 
73
- <!-- sapanはひとかたまりの範囲として定義するもの-->
73
+
74
74
 
75
75
  会議室:<span th:text="${room.roomName}"> 豊洲</span>
76
76
 
@@ -86,17 +86,17 @@
86
86
 
87
87
  時間帯:
88
88
 
89
- <!-- th:fieldはname,id,valueを自動生成 selectの場合はnameとid不足分を補うって感じ -->
89
+
90
90
 
91
91
  <select th:field="*{startTime}">
92
92
 
93
- <!--変数名:リスト valueでreservationForm.startTimeに値入れる-->
93
+
94
94
 
95
95
  <option th:each="time : ${timeList}" th:text="${time}" th:value="${time}">09:00</option>
96
96
 
97
97
  </select>
98
98
 
99
- <!--#fields.hasErrors()は引数のフィールドに問題あったら反応-->
99
+
100
100
 
101
101
  <span th:if="${#fields.hasErrors('startTime')}" th:errors="*{startTime}" style="coler:red">
102
102
 
@@ -116,13 +116,11 @@
116
116
 
117
117
  <br/>
118
118
 
119
- <!-- buttomのデフォルトはsubmit inputとの違いはこっちはサイズとか変えられる -->
120
-
121
119
  <button>予約</button>
122
120
 
123
121
  </form>
124
122
 
125
- <!-- 表作る -->
123
+
126
124
 
127
125
  <table>
128
126
 

1

情報の追加

2019/05/27 12:01

投稿

jampack
jampack

スコア10

test CHANGED
File without changes
test CHANGED
@@ -290,7 +290,93 @@
290
290
 
291
291
  ```
292
292
 
293
-
293
+ ```java
294
+
295
+ ここもあやしそうなので一応
296
+
297
+ package mrs.domain.service.reservation;
298
+
299
+
300
+
301
+ import java.util.List;
302
+
303
+ import java.util.Objects;
304
+
305
+
306
+
307
+ import org.springframework.beans.factory.annotation.Autowired;
308
+
309
+ import org.springframework.stereotype.Service;
310
+
311
+ import org.springframework.transaction.annotation.Transactional;
312
+
313
+
314
+
315
+ import mrs.domain.model.ReservableRoom;
316
+
317
+ import mrs.domain.model.ReservableRoomId;
318
+
319
+ import mrs.domain.model.Reservation;
320
+
321
+ import mrs.domain.model.RoleName;
322
+
323
+ import mrs.domain.model.User;
324
+
325
+ import mrs.domain.repository.reservation.ReservationRepository;
326
+
327
+ import mrs.domain.repository.room.ReservableRoomRepository;
328
+
329
+
330
+
331
+ @Service
332
+
333
+ @Transactional
334
+
335
+ public class ReservationService {
336
+
337
+ @Autowired
338
+
339
+ ReservationRepository reservationRepository;
340
+
341
+ @Autowired
342
+
343
+ ReservableRoomRepository reservableRoomRepository;
344
+
345
+
346
+
347
+ public Reservation reserve(Reservation reservation) {
348
+
349
+ ReservableRoomId reservableRoomId = reservation.getReservableRoom().getReservableRoomId();
350
+
351
+ ReservableRoom reservable = reservableRoomRepository.findById(reservableRoomId).orElseGet(null);
352
+
353
+ if(reservable == null) {
354
+
355
+ throw new UnavailableReservationException("入力の日付・部屋の組み合わせは予約できません。");
356
+
357
+ }
358
+
359
+ boolean overlap = reservationRepository.findByReservableRoom_ReservableRoomIdOrderByStartTimeAsc(reservableRoomId)
360
+
361
+ .stream()
362
+
363
+ .anyMatch(x -> x.overlap(reservation));
364
+
365
+ if(overlap) {
366
+
367
+ throw new AlreadyReservedException("入力の時間帯はすでに予約済みです。");
368
+
369
+ }
370
+
371
+ reservationRepository.save(reservation);
372
+
373
+ return reservation;
374
+
375
+ }
376
+
377
+ }
378
+
379
+ ```
294
380
 
295
381
  ### 試したこと
296
382
 
@@ -298,6 +384,10 @@
298
384
 
299
385
  メソッド内の処理をreturnのみにする→想定内の処理で何もおこらない
300
386
 
387
+ コントローラからreserve抜いてstartTime,endTimeをそれぞれnullにしたところ問題なくリダイレクトした
388
+
389
+ →reserveに問題がありそう
390
+
301
391
 
302
392
 
303
393
  ### 補足情報(FW/ツールのバージョンなど)