→演習問題の実装例はTodolist7です。
問い合わせ先:kktworks@gmail.com
Twitter:Follow @kktworks1
■2022/05/14 更新:
6.4 リポジトリの【表6-5】自動実装されるメソッド をSpring Data JPA2.5/2.6に合わせ更新しました。
■2020/12/19 訂正:
11.3 動的クエリ結果のページング > 【リスト11-8】src/main/resources/templates/todoList.html(step2;一部抜粋)
検索条件に該当するToDoが無かった場合もページリンクを表示しないようにするため、以下のように訂正します。
<div th:if="${todoPage != null><!-- ① -->
↓
<div th:if="${todoPage != null && #lists.size(todoList) != 0}"><!-- ① -->
または
<div th:if="${todoList != null && #lists.size(todoList) != 0}"><!-- ① -->
■2020/12/19 訂正:
7.3 サービスクラス > 【リスト7-3】com.example.todolist.service.TodoService.java
件名が全角スペースだけかどうかのチェック処理で余分なエラーメッセージを作成していました。以下のようにすれば解消されます。
// 件名が全角スペースだけで構成されていたらエラー
//■訂正前
//String title = todoData.getTitle();
//if (title != null) {
// for (int i = 0; i < title.length(); i++) {
// if (title.charAt(i) != ' ') {
// break;
// }
// FieldError fieldError = new FieldError(
// result.getObjectName(),
// "title",
// "件名が全角スペースです");
// result.addError(fieldError);
// ans = false;
// }
//}
//■訂正後
String title = todoData.getTitle();
if (title != null && !title.equals("")) {
boolean isAllDoubleSpace = true;
for (int i = 0; i < title.length(); i++) {
if (title.charAt(i) != ' ') {
isAllDoubleSpace = false;
break;
}
}
if (isAllDoubleSpace) {
FieldError fieldError = new FieldError(
result.getObjectName(),
"title",
"件名が全角スペースです");
result.addError(fieldError);
ans = false;
}
}
■2020/12/08:不要ファイルを削除してサイズ削減。ソースリストに変更はありません。
■2020/11/25:ソースリストを一部訂正しました。訂正箇所は演習問題の実装例Todolist7だけです。
■2020/11/21 補足:ModelAndViewを使ったredirect方法
8.5 PRG(Post-Redirect-Get)パターン > 【リスト8-8】Todolist3のTodoListController.java#createTodo()では、次画面を文字列で指定するためModelAndViewをModelへ変更しました。これとは別にリダイレクト先をModelAndView#setViewName()の引数にする方法もあります。この場合、【リスト8-8】は以下のようになります。
// ToDo追加処理(Todolist2で追加したものをTodolist3で改善)
@PostMapping("/todo/create")
public ModelAndView createTodo(@ModelAttribute @Validated TodoData todoData,
BindingResult result,
ModelAndView mv) {
// エラーチェック
boolean isValid = todoService.isValid(todoData, result);
if (!result.hasErrors() && isValid) {
// エラーなし
Todo todo = todoData.toEntity();
todoRepository.saveAndFlush(todo);
mv.setViewName("redirect:/todo");
} else {
// エラーあり
// model.addAttribute("todoData", todoData);
mv.setViewName("todoForm");
}
return mv;
}
問い合わせ先:kktworks@gmail.com
Twitter:Follow @kktworks1