Spring Bootで始めるWebアプリケーション開発入門 掲載ソースリスト(2020/12/22)

→演習問題の実装例は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}"><!-- ① -->
#listsはTymeleafのリスト用のユーティリティオブジェクトです。size()は引数の要素数を返します。検索条件に該当するToDoがない場合、todoistは0件なので、これでチェックできます。todoListだけをチェックする後者の記述がシンプルで良いように思います。

■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

Topへ戻る