質問編集履歴
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
誤字の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -166,7 +166,7 @@
|
|
166
166
|
|
167
167
|
<td>
|
168
168
|
|
169
|
-
<form th:action="@{'/reservation/'
|
169
|
+
<form th:action="@{'/reservation/' + ${date} + '/' + ${roomId}}" method="post"
|
170
170
|
|
171
171
|
th:if="${user.userId == reservation.user.userId}">
|
172
172
|
|
8
追記
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
追記
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
追記
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
修正
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
|
-
|
431
|
+
WEBページ上でのHTML
|
384
432
|
|
385
433
|
<!DOCTYPE html>
|
386
434
|
|
387
|
-
<html
|
435
|
+
<html>
|
388
436
|
|
389
437
|
<head>
|
390
438
|
|
391
439
|
<meta charset="UTF-8"/>
|
392
440
|
|
393
|
-
<title
|
441
|
+
<title>テスト</title>
|
394
442
|
|
395
443
|
</head>
|
396
444
|
|
397
445
|
<body>
|
398
446
|
|
399
|
-
<div
|
447
|
+
<div></div>
|
400
|
-
|
401
|
-
|
448
|
+
|
402
|
-
|
403
|
-
<span
|
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
情報の追記
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
test
CHANGED
File without changes
|
test
CHANGED
@@ -234,11 +234,7 @@
|
|
234
234
|
|
235
235
|
@RequestMapping(method = RequestMethod.POST)
|
236
236
|
|
237
|
-
|
237
|
+
|
238
|
-
|
239
|
-
//上でform作ってからPOSTしてるからこっちはデータが入ったreservationFormインスタンスが渡される,
|
240
|
-
|
241
|
-
//名前は何でもいいかもしんない、型さえあってれば、要確認
|
242
238
|
|
243
239
|
String reserve(@Validated ReservationForm reservationForm,BindingResult bindingResult,
|
244
240
|
|
2
test
CHANGED
File without changes
|
test
CHANGED
@@ -64,13 +64,13 @@
|
|
64
64
|
|
65
65
|
|
66
66
|
|
67
|
-
|
67
|
+
|
68
68
|
|
69
69
|
<form th:object="${reservationForm}"
|
70
70
|
|
71
71
|
th:action="@{'/reservations/' + ${date} + '/' + ${roomId}}" method = "post">
|
72
72
|
|
73
|
-
|
73
|
+
|
74
74
|
|
75
75
|
会議室:<span th:text="${room.roomName}"> 豊洲</span>
|
76
76
|
|
@@ -86,17 +86,17 @@
|
|
86
86
|
|
87
87
|
時間帯:
|
88
88
|
|
89
|
-
|
89
|
+
|
90
90
|
|
91
91
|
<select th:field="*{startTime}">
|
92
92
|
|
93
|
-
|
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
|
-
|
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
情報の追加
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/ツールのバージョンなど)
|