【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑧戻る機能の実装-

戻る機能を作成していきましょう。

# 2.設計で検討した一覧機能をおさらい

>1.画面遷移
一覧画面　⇔　登録画面　⇔　確認画面　→　完了画面　（→　一覧画面）
　　　　　⇔　変更画面　⇔　確認画面　→　完了画面　（→　一覧画面）
　　　　　→削除確認画面　→　完了画面（→　一覧画面）


>URL設計
画面名: タスク確認画面からタスク変更画面
URL: /task/back
HTTPメソッド: GET


＊

画面遷移図にて両矢印（⇔）になっているところは、前の画面に戻ることができます。登録画面、確認画面周りで戻る処理を追加していきましょう。


# controllerクラスを書いてみよう

URL設計で検討したURLをもとにcontrollerクラスのメソッドを書いていきましょう。

確認画面から登録画面に戻る際は、入力した値がクリアされないようにしたいです。そのため、確認画面で表示した値をオブジェクトで引数として受け取り、画面に表示するようにします。

```java
    @GetMapping("/task/back")
    public String backToEditPage(TaskForm taskForm,Model model) {
    	model.addAttribute("taskForm", taskForm);
    	return "task/edit";
    }
```

# htmlを修正しよう

次にhtmlを修正していきましょう。

まず、登録画面から一覧画面に戻る遷移では、入力値の移動がないので、htmlでリンクで遷移します。

edit.htmlの戻るボタンは以下のようになっていると思います。
```html
<a type="button" class="btn btn-outline-secondary" href="/task/list">back</a>
```

hrefを修正します。
```html
<a type="button" class="btn btn-outline-secondary" th:href="@{/task/list}">back</a>
```

削除確認画面から一覧画面への戻る遷移も同様の修正を行います。

＊

確認画面から登録画面への戻る処理を追加していきます。
controllerクラスにbackメソッドを書いたので、htmlでは、このbackメソッドに値を渡してあげるような記述を行います。

修正前
```html
        <div class="d-flex justify-content-start">
            <form th:action="@{/task/save}" method="post" th:object="${taskForm}"class="mb-3">
                <input type="hidden" name="title" th:field="*{title}">
                <input type="hidden" name="description" th:field="*{description}">
                <input type="hidden" name="deadline" th:field="*{deadline}">
                <input type="hidden" name="taskId" th:field="*{taskId}">
                <input type="hidden" name="status" th:field="*{status}">
                <input type="hidden" name="updatedAt" th:value="*{updatedAt}">
                <!-- 送信ボタン -->
                <button type="submit" class="btn btn-primary me-2" value="submit">submit</button>
            </form> 
                <button type="submit" class="btn btn-outline-secondary">back</button> 
        </div>
```

修正後
```html
        <div class="d-flex justify-content-start">
            <form th:action="@{/task/save}" method="post" th:object="${taskForm}"class="mb-3">
                <input type="hidden" name="title" th:field="*{title}">
                <input type="hidden" name="description" th:field="*{description}">
                <input type="hidden" name="deadline" th:field="*{deadline}">
                <input type="hidden" name="taskId" th:field="*{taskId}">
                <input type="hidden" name="status" th:field="*{status}">
                <input type="hidden" name="updatedAt" th:value="*{updatedAt}">
                <!-- 送信ボタン -->
                <button type="submit" class="btn btn-primary me-2" value="submit">submit</button>
            </form> 
            <form th:action="@{/task/back}" method="get" th:object="${taskForm}">
				<input type="hidden" name="title" th:field="*{title}">
    			<input type="hidden" name="description" th:field="*{description}">
    			<input type="hidden" name="deadline" th:field="*{deadline}">
    			<input type="hidden" name="taskId" th:field="*{taskId}">
    			<input type="hidden" name="status" th:field="*{status}">
    			<input type="hidden" name="updatedAt" th:value="*{updatedAt}">
    			<button type="submit" class="btn btn-outline-secondary">back</button>
		    </form>
        </div>
```

これで戻る処理の実装は終わりです。

次の投稿では、例外処理の実装を行います。

[【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-①イントロダクション-](https://qiita.com/aki_number16/items/4ce2c61297e6754928ce "【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-①イントロダクション-")
[【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-②設計-](https://qiita.com/aki_number16/items/9507e7f9477725e722cd "【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-②設計-")
[【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-③実装方針と環境構築-](https://qiita.com/aki_number16/items/79a514c5b8a70fbc41ac "【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-③実装方針と環境構築-")
[【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-④一覧機能の作成-](https://qiita.com/aki_number16/items/7cc7d4b522fd9a3d6dc8 "【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-④一覧機能の作成-")
[【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑤新規登録機能の作成-](https://qiita.com/aki_number16/items/bd4a559db587a502100e "【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑤新規登録機能の作成-")
[【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑥変更機能の作成-](https://qiita.com/aki_number16/items/554ed617fa1b314e794c "【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑥変更機能の作成-")
[【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑦削除機能の実装-](https://qiita.com/aki_number16/items/648cff45366445135000 "【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑦削除機能の実装-")
[【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑧戻る機能の実装-](https://qiita.com/aki_number16/items/548f1918830024df7de8 "【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑧戻る機能の実装-")
[【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑨例外処理の実装-](https://qiita.com/aki_number16/items/7ccad8e9805d58942eba "【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑨例外処理の実装-")