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

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

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

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

Spring Boot

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

Q&A

解決済

1回答

1026閲覧

Javaアプリの編集画面への移動機能を作成したい

milkcoffee

総合スコア14

Java

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

Spring Boot

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

0グッド

1クリップ

投稿2022/05/05 19:53

編集2022/05/06 19:02

前提

Javaの学習のためシンプルなアプリを作っています。
(こちらを参考にしています)
入力したデータの編集画面への移動を試みていますが失敗しています。

実現したいこと

入力したデータの編集ページへの移動機能を作りたいです。

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

eclipseを使っているのですが、以下の部分でエラーメッセージが発生しました。

java

1 @GetMapping("{id}/edit") 2 public String edit(@PathVariable String id, Model model) { 3 Item item = repository.findById(id);4 model.addAttribute("item", item);5 return "root/edit"; 6 }
  1. 型の不一致: Optional<InquiryForm> から AbstractReadWriteAccess.Item には変換できません
  2. メソッド addAtribute(String, AbstractReadWriteAccess.Item) は型 Model で未定義です

該当のソースコード

RootController.java

java

1package com.example.demo.controllers; 2 3import org.hibernate.cache.spi.support.AbstractReadWriteAccess.Item; 4import org.springframework.beans.factory.annotation.Autowired; 5import org.springframework.stereotype.Controller; 6import org.springframework.ui.Model; 7import org.springframework.validation.BindingResult; 8import org.springframework.validation.annotation.Validated; 9import org.springframework.web.bind.annotation.GetMapping; 10import org.springframework.web.bind.annotation.ModelAttribute; 11import org.springframework.web.bind.annotation.PathVariable; 12import org.springframework.web.bind.annotation.PostMapping; 13import org.springframework.web.bind.annotation.RequestMapping; 14 15import com.example.demo.models.InquiryForm; 16import com.example.demo.models.InquiryForm2; 17 18import com.example.demo.repositries.InquiryRepository; 19import com.example.demo.repositries.InquiryRepository2; 20 21import ch.qos.logback.core.joran.spi.EventPlayer; 22 23import java.util.List; 24 25@Controller 26@RequestMapping("/") 27public class RootController { 28 29 @Autowired 30 InquiryRepository repository; 31 32 @GetMapping 33 public String index() { 34 return "root/index"; 35 } 36 37 @GetMapping("/list") 38 public String inquiryList(Model model) { 39 List<InquiryForm> items = repository.findAll(); 40 model.addAttribute("items", items); 41 return "root/list"; 42 } 43 44 @GetMapping("/form") 45 public String form(InquiryForm inquiryForm) { 46 return "root/form"; 47 } 48 49 @PostMapping("/form") 50 public String form(@Validated InquiryForm inquiryForm, BindingResult bindingResult, Model model) { 51 if (bindingResult.hasErrors()) { 52 return "root/form"; 53 } 54 55 repository.saveAndFlush(inquiryForm); 56 inquiryForm.clear(); 57 model.addAttribute("message", "お問い合わせを受け付けました。"); 58 return "root/form"; 59 } 60 61 /* 62 * 問題の箇所 63 */ 64 @GetMapping("{id}/edit") 65 public String edit(@PathVariable Long id, Model model) { 66 Optional<InquiryForm> item = repository.findById(id); 67 model.addAttribute("item", item); 68 return "root/edit"; 69 }

inquiryRepository.java

java

1package com.example.demo.repositries; 2 3import java.util.List; 4import java.util.Optional; 5 6import org.springframework.data.jpa.repository.JpaRepository; 7import org.springframework.stereotype.Repository; 8 9import com.example.demo.models.InquiryForm; 10 11@Repository 12 13public interface InquiryRepository extends JpaRepository<InquiryForm, String>{ 14 Optional<InquiryForm> findById(Long id); 15 List<InquiryForm> findAll(); 16}

inquiryForm.java

java

1package com.example.demo.models; 2 3import javax.validation.constraints.Email; 4import javax.validation.constraints.NotBlank; 5import javax.validation.constraints.Size; 6 7import java.io.Serializable; 8 9import javax.persistence.Entity; 10import javax.persistence.GeneratedValue; 11import javax.persistence.GenerationType; 12import javax.persistence.Id; 13import javax.persistence.Table; 14 15import lombok.Data; 16 17@Data 18@Entity 19@Table(name = "inquiry") 20public class InquiryForm implements Serializable { 21 private static final long serialVersionUID = -6647247658748349084L; 22 23 @Id 24 @GeneratedValue(strategy = GenerationType.IDENTITY) 25 private long id; 26 27 @NotBlank 28 @Size(max = 10) 29 private String name; 30 31 @NotBlank 32 @Email 33 private String mail; 34 35 @NotBlank 36 @Size(max = 400) 37 private String content; 38 39 public void clear() { 40 name = null; 41 mail = null; 42 content = null; 43 } 44}

edit.html

java

1<!doctype html> 2<html xmlns:th="http://www.thymeleaf.org" lang="ja"> 3<head> 4<title>編集画面</title> 5</head> 6<body> 7 <header> 8 <h1> 9 編集画面 10 </h1> 11 </header> 12</body> 13</html>

試したこと

1, repository.findById(id);
型がないからではと思い、(String id) や(Long id)とすると
- String/Long を変数に解決できません
- トークン "id" に構文エラーがあります。このトークンを削除してください
と別のエラーになってしまいました。

2, model.addAtribute("item", item);
エラーが型 Model で未定義とあるので、Model.classファイルに
import org.hibernate.cache.spi.support.AbstractReadWriteAccess.Item;
の追加を試みましたが書き込み不可だったので正解ではないようです。

解決方法が思いつきません。
お手数おかけしますが、よろしくお願いします。

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

Java 15.0.1
SpringToolSuite4

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

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

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

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

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

m.ts10806

2022/05/05 21:20

Spring / Spring Boot を質問タグとして追加してください。
milkcoffee

2022/05/05 22:25

ご指摘ありがとうございます。 追加しました。
guest

回答1

0

自己解決

本件解決しました。
まず2についてはスペルミスでした。
1については、型を修正しました。

@GetMapping("{id}/edit") public String edit(@PathVariable Long id, Model model) { Optional<InquiryForm> item = repository.findById(id); model.addAttribute("item", item); return "root/edit";

=>StringからLongへの修正
=>ItemからOptional<InquiryForm>への変更(InquiryFormはエンティティのクラスです)

@Repository public interface InquiryRepository extends JpaRepository<InquiryForm, String>{ Optional<InquiryForm> findById(Long id); List<InquiryForm> findAll(); }

=>StringからLongへの修正

投稿2022/05/06 19:06

milkcoffee

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問