質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

2回答

1621閲覧

SpringBoot 編集画面で、特定のデータが取得できない

1998Ttf

総合スコア6

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2021/09/07 14:36

編集2021/09/10 06:05

###使用環境

ー Mac OS
ー Spring Tool Suite4
ー Java 11
ー SpringBoot 2.5.4

###現状の問題点と実現したいこと
Spring初学者です。

現在編集画面を作成しており、その際に発生したことを記載させていただきます。

特定のユーザーの編集画面自体は表示されるのですが、

フォームにそのユーザーのデータが表示されないです。

###ソースコード

CustomerController

1@GetMapping(path = "edit", params = "form") 2 String editForm(@RequestParam Integer id, CustomerForm form) { 3 Optional<Customer> customer = customerService.findOne(id); 4 BeanUtils.copyProperties(customer, form); 5 return "customers/edit"; 6 }

edit

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3 <head> 4 <meta charset="UTF-8" /> 5 <title>顧客情報編集</title> 6 <link rel="stylesheet" type="text/css" href="../../static/css/style.css" th:href="@{/css/style.css}" /> 7 </head> 8 <body> 9 <form th:action="@{/customers/edit}" th:object="${customerForm}" method="post"> 10 <dl> 11 <dt><label for="lastName">姓</label></dt> 12 <dd> 13 <input type="text" id="lastName" th:field="*{lastName}" name="lastName" th:errorclass="error-input" value="山田"/> 14 <span th:if="${#fields.hasErrors('lastName')}" th:errors="*{lastName}" class="error-messages">error!</span> 15 </dd> 16 <dt><label for="firstName">名</label></dt> 17 <dd> 18 <input type="text" id="firstName" th:field="*{firstName}" name="firstName" th:errorclass="error-input" value="太郎"/> 19 <span th:if="${#fields.hasErrors('firstName')}" th:errors="*{firstName}" class="error-messages">error!</span> 20 </dd> 21 </dl> 22 <input type="submit" name="goToTop" value="戻る" /> 23 <input type="hidden" name="id" th:value="${param.id[0]}" /> 24 <input type="submit" value="更新" /> 25 </form> 26 </body> 27</html>

※⏬編集画面遷移のフォーム部分です。

list

1<table> 2 <tr th:each="customer : ${customers}"> 3 <td th:text="${customer.id}">100</td> 4 <td th:text="${customer.lastName}">山田</td> 5 <td th:text="${customer.firstName}">太郎</td> 6 <td> 7 <form th:action="@{/customers/edit}" method="get"> 8 <input type="submit" name="form" value="編集" /> 9 <input type="hidden" name="id" th:value="${customer.id}" /> 10 </form> 11 </td> 12 </tr> 13</table>
1. select customer0_.id as id1_0_0_, customer0_.first_name as first_na2_0_0_, customer0_.last_name as last_nam3_0_0_ from customers customer0_ where customer0_.id=1 {executed in 0 msec}

###考えられること
編集機能自体は正常にできているため、バックエンド部分は問題ないのかなと考えています。

予想としては、HTMLが怪しいと考えているのですが、原因究明できず、どなたかご教授いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

Controllerクラスの編集メソッドに、以下の内容を追加する。

@GetMapping(path = "edit", params = "form")
String editForm(@RequestParam Integer id, CustomerForm form, Model model) {
⬆︎引数に「Model model」を追加
Optional<Customer> customer = customerService.findOne(id);
BeanUtils.copyProperties(customer, form);
// ⬆️もしかしたらこの一行は必要ないかと思います。。

model.addAttribute("customer", customer);  //⇦この一行を追加
return "customers/edit";
}

投稿2021/09/10 06:08

1998Ttf

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Optionalは「中身がnullかもしれませんよ」という状態を表すクラスなので、中身を取り出して使うのが通常です。

CustomerController

1Customer customer = customerService.findOne(id) 2 .orElseThrow(() -> new NotFoundException("存在しない顧客です"));

BeanUtilsは間違いに気づきにくいので慣れないうちは使わない方がいいです。

投稿2021/09/07 19:31

sooogle

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1998Ttf

2021/09/09 07:11 編集

返信が遅れてしまい、大変申し訳ございません! ご回答ありがとうございます! いただいた方法を試したのですが、以下のエラーが出力されてしまいます。 Multiple markers at this line - NotFoundException cannot be resolved to a type - The method orElseThrow(Supplier<? extends X>) in the type Optional<Customer> is not applicable for the arguments (() -> {}) また、findOneメソッドに関して、以前から「Optional<Customer>」という表記でないとエラーが発生してしまう状態です。 バージョン変更に伴いこうなったのではないかと、調べたところ考えております。(再度調べます。) 結果、下記の方法で成功しました。一覧画面同様、モデルに保存し、Viewへ値を渡すと成功しました。 @GetMapping(path = "edit", params = "form") String editForm(@RequestParam Integer id, CustomerForm form, Model model) { Optional<Customer> customer = customerService.findOne(id); BeanUtils.copyProperties(customer, form);       // ⬆️もしかしたらこの一行は必要ないかと思います。。 model.addAttribute("customer", customer); return "customers/edit"; } 改めて、ご回答いただきありがとうございます。初学者のため、今回の実装方法で問題ございましたら、ご指摘いただければ幸いでございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問