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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

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

Q&A

1回答

470閲覧

編集画面を表示させたい。

ttorubou

総合スコア0

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

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

0グッド

0クリップ

投稿2022/09/10 08:19

前提

社員管理システムを作っています。
社員編集機能を実装したいのですが、実行するとエラーが起こってしまいます。

実現したいこと

まず画面を表示させたい

発生している問題・エラーメッセージ

http://localhost:8080/

There was an unexpected error (type=Internal Server Error, status=500). The given id must not be null!; nested exception is java.lang.IllegalArgumentException: The given id must not be null! org.springframework.dao.InvalidDataAccessApiUsageException: The given id must not be null!; nested exception is java.lang.IllegalArgumentException: The given id must not be null!

該当のソースコード(EditController.java)

@RequestMapping @RequiredArgsConstructor @Controller public class EditController { @Autowired private EditService editService; @SuppressWarnings("unused") @GetMapping(value = "/edit1") public String index(Model model) { EditRequest editRequest = new EditRequest(); return "html/edit"; } /** * ユーザー編集画面を表示 * */ @GetMapping(value = "/") public String displayEdit(EditRequest editRequest, Model model) { Edit edit = editService.findById(editRequest.getUser_id()); EditRequest editRequest1 = new EditRequest(); editRequest1.setUser_id(edit.getUser_id()); editRequest1.setName(edit.getName()); editRequest1.setName_kana(edit.getName_kana()); editRequest1.setPassword(edit.getPassword()); editRequest1.setUpn(edit.getUpn()); editRequest1.setBirthday(edit.getBirthday()); editRequest1.setRole_code(edit.getRole_code()); editRequest1.setPrefecture_code(edit.getPrefecture_code()); editRequest1.setDepartment_code(edit.getDepartment_code()); editRequest1.setEntry_date(edit.getEntry_date()); editRequest1.setProfile_image(edit.getProfile_image()); // List<Edit> editList = editService.findAll(); model.addAttribute("editRequest", editRequest1); return "html/edit"; } @RequestMapping("/") public String update(@Valid EditRequest editRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return "html/edit"; } // ユーザー情報の更新 return "redirect:/editcomplete"; } //ぷろふぃ^る画像のアップロード @ResponseBody @PostMapping(value = "upload" , consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public Object upload(@RequestPart("file") MultipartFile filePart) throws IOException { File file = File.createTempFile(UUID.randomUUID().toString(), filePart.getOriginalFilename()); filePart.transferTo(file.toPath()); byte[] bytes = Files.readAllBytes(file.toPath()); //ファイルの読み込み HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.parseMediaType(Files.probeContentType(file.toPath()))); httpHeaders.setContentLength(bytes.length); return new HttpEntity<>(bytes, httpHeaders); //レスポンス } }

該当のソースコード(EditService.java)

@Service @Transactional(rollbackFor = Exception.class) public class EditService { @Autowired private EditRepository editRepository; public Edit findById(String user_id) { Edit findId = editRepository.findById(user_id).get(); return findId; } public void update(EditRequest editRequest) { Edit edit = findById(editRequest.getUser_id()); // edit.setUser_id(editRequest.getUser_id()); edit.setName(editRequest.getName()); edit.setName_kana(editRequest.getName_kana()); edit.setPassword(editRequest.getPassword()); edit.setUpn(editRequest.getUpn()); edit.setBirthday(editRequest.getBirthday()); edit.setRole_code(editRequest.getRole_code()); edit.setPrefecture_code(editRequest.getPrefecture_code()); edit.setDepartment_code(editRequest.getDepartment_code()); edit.setEntry_date(editRequest.getEntry_date()); edit.setProfile_image(editRequest.getProfile_image()); editRepository.save(edit); } }

該当のソースコード(edit.html)

<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="edit.css"> <title>社員編集・削除</title> </head> <body> <div class="wrapper"> <div class="ground"> <div class="edit"> <p>社員編集・削除</p> </div> <form> <input type="file" name="file"/> <button type="submit" formenctype="multipart/form-data" formmethod="post" formaction="/upload">MultipartFile送信</button> </form> <form th:action="@{/}" th:object="${editRequest}" th:method="post"> <div class="center"> <div class="main clearfix"> <table class="main-left"> <tr > <th >ユーザーID</th> <td><input class="user_id" type="text" name="user_id" value="" size="35" th:field="*{user_id}"></td> <td th:if="${#fields.hasErrors('user_id')}" th:errors="*{user_id}">ID Error</td> </tr> <tr > <th >名前</th> <td><input class="name" type="text" name="name" value="" size="35" th:field="*{name}"></td> <td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</td> </tr> <tr > <th >カナ</th> <td><input class="name_katakana" type="text" name="name_katakana" value="" size="35" th:field="*{name_katakana}"></td> <td th:if="${#fields.hasErrors('name_katakana')}" th:errors="*{name_katakana}">Name_katakana Error</td> </tr> <tr > <th >パスワード</th> <td><input class="password" type="text" name="password" value="" size="35" th:field="*{password}"></td> <td th:if="${#fields.hasErrors('password')}" th:errors="*{password}">password Error</td> </tr> <tr > <th >メールアドレス</th> <td><input class="email" type="text" name="email" value="" size="35" th:field="*{email}"></td> <td th:if="${#fields.hasErrors('email')}" th:errors="*{email}">email Error</td> </tr> </table> <table class="main-right clearfix"> <tr > <th >生年月日</th> <td><input class="birthday" type="date" name="birthday" value="" th:field="*{birthday}"></td> <td th:if="${#fields.hasErrors('birthday')}" th:errors="*{birthday}">birthday Error</td> </tr> <tr > <th >性別</th> <td> <input type="radio" name="gender" value="1"th:field="*{gender}"> 男 <input type="radio" name="gender" value="2"th:field="*{gender}"> 女 </td> <td th:if="${#fields.hasErrors('birthday')}" th:errors="*{birthday}">birthday Error</td> </tr> <tr > <th >出身地</th> <td> <select th:field="*{prefecture}" name="prefecture"> <option value="1">北海道</option> <option value="2">青森県</option> <option value="3">岩手県</option> <option value="4">宮城県</option> <option value="5">秋田県</option>              ~中略~ </select> </td> </tr> <tr > <th >役職</th> <td> <select name="role_code" th:field="*{role_code}"> <option value="C">主任</option> <option value="CEO">代表取締役社長</option> <option value="D">係長</option> <option value="DD">本部長</option> <option value="DM">秋田県</option> <option value="M">山形県</option> <option value="MD">福島県</option> <option value="S">茨城県</option> <option value="SM">福島県</option> <option value="SMD">茨城県</option> </select> </td> <td th:if="${#fields.hasErrors('role_code')}" th:errors="*{role_code}">role_code Error</td> </tr> <tr > <th >部署</th> <td> <select name="department_code" th:field="*{department_code}"> <option value="0">本社</option> <option value="1">東京支店</option> <option value="2">神奈川支店</option> <option value="3">大阪支店</option> <option value="4">仙台支店</option> <option value="5">新潟支店</option> </select> </td> </tr> <tr > <th >入社日</th> <td> <input class="hire_date" type="date" name="hire_date" value="" th:field="*{hire_date}"> </td> <td th:if="${#fields.hasErrors('hire_date')}" th:errors="*{hire_date}">hire_date Error</td> </tr> </table> </div> <div class="botton clearfix"> <button class="left-footer" type="submit" onclick="">変更</button> <button class="right-footer" type="submit" onclick="">削除</button> </div> </div> <!-- <input type="hidden" name="user_id" th:value="${param.user_id[0]}">--> </form> </div> </div> </body> </html>

該当のソースコード(EditRequest.java)

@EqualsAndHashCode(callSuper=false) @Data public class EditRequest implements Serializable { /** * ID */ @NotNull private String user_id; /** * 名前 */ @NotEmpty(message = "名前を入力してください") @Size(max = 20, message = "名前は20桁以内で入力してください") private String name; /** * 名前カナ */ @NotEmpty(message = "名前をカナで入力してください") @Size(max = 50, message = "名前は50桁以内で入力してください") private String name_kana; /** * パスワード */ @NotEmpty(message = "パスワードを入力してください") @Size(max = 100, message = "名前は100文字以内で入力してください") private String password; /** * メール */ @NotEmpty(message = "メールアドレスを入力してください") @Size(max = 50, message = "名前は50文字以内で入力してください") private String upn; /** * 誕生日 */ @NotEmpty(message = "生年月日を入力してください") private Date birthday; /** * 性別 */ @NotEmpty(message = "性別を選択してください") private String gender; /** * 役職 */ @NotEmpty(message = "役職を選択してください") private String role_code; /** * 出身地 */ @Nullable private String prefecture_code; /** * 部署 */ @Nullable private String department_code; /** * 入社日 */ @NotEmpty(message = "入社日を入力してください") private Date entry_date; /** * プロフィール画像 */ @Nullable private String profile_image; }

補足情報(FW/ツールのバージョンなど)

・spring boot
・thymeleaf
・postgerSQL
・java

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

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

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

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

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

guest

回答1

0

ひとまずエラーの通りでは。
コントローラのindex()メソッドにおいて、何がしたいのか謎の一行がありますね
EditRequest editRequest = new EditRequest();
これでは@NotNullに指定してる項目がNULLのままでしょうね。
「リクエスト」と名がついてますが、リクエストになってませんし、
newしただけでmodelにセットしてないのでテンプレートに渡されてません。

投稿2022/09/10 09:39

編集2022/09/10 09:40
m.ts10806

総合スコア80850

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

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

ttorubou

2022/09/10 11:05

ご回答ありがとうございます。私自身初心者で、うまく理解できておらずこのような結果になってしまっています。 @SuppressWarnings("unused") @GetMapping(value = "/edit1") public String index(Model model) { EditRequest editRequest = new EditRequest(); return "html/edit"; } こちらの文に関してはひとまず削除しました。実行してみたところやはり同じエラー内容になってしまいます。
m.ts10806

2022/09/10 11:49

どういう操作してそうなっているのでしょう。 どういう画面(URL)からどういう画面(URL)に遷移しようとしているかとか。 あと @RequestMapping("/") で http://example.com/コンテキストパス(あれば)/ アクセスされるわけですが、 そこではEditRequestにどのように値注入してるか(リクエストを送っているか) など、 自身がどういう想定をしてどういう実装をしているかを記載されたほうが良いと思います。 「なんとなく」だと、自身で説明できないので、他者にも答えようがないということになります(「エラーの通りですね」以上言えなくなる)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問