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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Spring Boot

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

Q&A

解決済

1回答

3279閲覧

テンプレートファイルが表示出来ない

aae_11

総合スコア178

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Spring Boot

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

2グッド

0クリップ

投稿2020/05/01 13:29

編集2020/05/02 01:23

テンプレートファイル表示をさせた際に、エラーが発生してしまいました。
実行は、「Eclipse」より実行させ、アクセスはブラウザに「http://localhost:8080/edit/1」と打ち込み行いました。
エラー内容は以下となります。(長すぎるので一部抜粋)

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Fri May 01 22:23:32 JST 2020 There was an unexpected error (type=Internal Server Error, status=500). An error happened during template parsing (template: "class path resource [templates/edit.html]") org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/edit.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100)

下記は、edit.htmlです。

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>edit page </title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <style> h1{font-size:18pt;font-weight:bold;color:gray;} body{ font-size:13pt; color:gray; margin:5px 25px;} tr{margin:5px;} th{padding:5px; color:white;background: darkgray;} td{padding:5px; color:black;background:e0e0ff;} </style> </head> <body> <h1 th:text="${title}">Edit page</h1> <table> <form method="post" action="/edit" th:object="${formModel}"> <input type="hidden" name="id" th:value="*{id}"/> <tr> <td><label for="name">名前</label></td> <td><input type="text" name="name" th:value="*{name}"></td> </tr> <tr> <td><label for="age">年齢</label></td> <td><input type="text" name="age" th:value="*{age}"></td> </tr> <tr> <td><label for="mail">メール</label></td> <td><input type="text" name="mail" th:value="*{mail}"></td> </tr> <tr> <td><label for="memo">メモ</label></td> <td><textarea name="memo" th:text="*{memo}" cols="20" rows="5"></textarea></td> </tr> <tr> <td><input type="submit"></td> </tr> </form> </table> </body> </html>

下記はHeloController.javaになります。

package com.test.springboot; import java.util.Optional; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; // import javax.transaction.Transactional; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; // import org.springframework.web.servlet.ModelAndView; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.shinya.springboot.repositories.MyDataRepository; @Controller public class HeloController { @Autowired MyDataRepository repository; @RequestMapping(value = "/edit/{id}", method = RequestMethod.GET) public ModelAndView edit(@ModelAttribute MyData mydata, @PathVariable int id, ModelAndView mav) { mav.setViewName("edit"); mav.addObject("title", "edit mydata."); Optional<MyData> data = repository.findById((long) id); mav.addObject("formModel",data); System.out.println("ok"); return mav; } @RequestMapping(value="/edit",method=RequestMethod.POST) @Transactional(readOnly=false) public ModelAndView form(@ModelAttribute MyData mydata,ModelAndView mav){ repository.saveAndFlush(mydata); return new ModelAndView("redirect:/"); } @PostConstruct public void init() { MyData d1 = new MyData(); d1.setName("tuyano"); d1.setAge(123); d1.setMail("syoda@tuyano.com"); d1.setMemo("this is my data!"); repository.saveAndFlush(d1); MyData d2 = new MyData(); d2.setName("hanako"); d2.setAge(15); d2.setMail("hanako@flower"); d2.setMemo("my girl friend"); repository.saveAndFlush(d2); MyData d3 = new MyData(); d3.setName("sachiko"); d3.setAge(37); d3.setMail("sachico@happy"); d3.setMemo("my work friend..."); repository.saveAndFlush(d3); } } class DataObject{ private int id; private String name; private String value; public DataObject(int id, String name, String value){ super(); this.id = id; this.name = name; this.value = value; } public int getId(){ return id;} public void setId(int id){ this.id = id;} public String getName() { return name;} public void setName(String name){ this.name = name; } public String getValue(){ return value; } public void setValue(String value){ this.value = value; } }

エラー内容で調べた結果、こちらの記事などを見つけましたが、解決に繋がる情報は載っていませんでした。

こちらのエラーの解決方法を教えて頂けましたら幸いです。

実行環境:
Eclipseのバージョン: Version: 2019-12 (4.14.0)
OS: MacOSMojave

追記
エラー内容に下記の行が見当たりました。

Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "id" (template: "edit" - line 18, col 44)

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'id' cannot be found on object of type 'java.util.Optional' - maybe not public or not valid?

こちらのエラーからQiitaなど見てみましたが、未だ解決方法はわかっていない状況です

以下は、エンティティクラス「MyData.java」です

package com.test.springboot; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="mydata") public class MyData { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column private long id; @Column(length = 50,nullable = false) private String name; @Column(length = 200,nullable = true) private String mail; @Column(nullable = true) private Integer age; @Column(nullable = true) private String memo; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } public Integer getAge(){ return age; } public void setAge(Integer age) { this.age = age; } public String getMemo() { return memo; } public void setMemo(String memo) { this.memo = memo; } }
study_111, newyee👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/05/01 14:51

ホワイトラベルのエラーページに何行目の何文字目でどういう記述でエラーがでてるかとかある程度かかれてるから調べてね 提示した範囲には詳細がわからない範囲です。 ※ わざわざエラーをこっちで出して確認はしません
aae_11

2020/05/01 23:48

追記しました。
m.ts10806

2020/05/02 01:00

自分で解決する気はないと。
aae_11

2020/05/02 01:01

試したことは記載してますよ
m.ts10806

2020/05/02 01:06

でも、自分で解決できるようになりたくはないと言うことですよね。 本当に自分で解決できるようになりたいなら基礎出来てないのにいつまでフレームワークやってるんでしょう?初心者の自覚があるならフレームワークなんて高尚なものに手を出してる場合じゃないでしょ。 色んな人に指摘されて無視し続けてる。 それで「書いてるからあとは解決して」ってそれ以前の問題。エラーの読み方なんか基礎です。どの言語でも。 前に聴きましたが返答がなかった。何なら初心者じゃないんですか? 初心者じゃない言語がありながらエラーをまともに読むことすらしないのは何故ですか?
m.ts10806

2020/05/02 01:11 編集

今できるアドバイスは「過去にうけたアドバイスをきちんと活かせば解決できる」です。そのまんまの内容ではなくでもちょっと考えれば出来る範囲。 何も考える力がないとプログラミングなんて到底できるわけがない。それだけ難しいものですから。
退会済みユーザー

退会済みユーザー

2020/05/02 01:15

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'id' cannot be found on object of type 'java.util.Optional' - maybe not public or not valid? というかわざわざ回答するまでもなく答自体かかれてるから、翻訳すらしたくないんだろうね。
aae_11

2020/05/02 01:24 編集

エラー内容は知っていますが、カラム「id」はエンティティクラスに存在していますよ。
m.ts10806

2020/05/02 01:26

ちょっと考えれば出来る範囲。 ちょっと考えることを放棄してるだけの話ですね。 質問書く時間を考える時間にあてた方が良いです。「自分を疑うところから」。これも何回目でしょうね。
m.ts10806

2020/05/02 01:32

あと書籍 Laravelでよく使われる人と同じ人っぽいですね。 となると展開は同じ。この人の本で失敗する初心者は非常に多い。 (ただ、aae_11さんについては本人の性質や性格により失敗している割合が大きい。これは関わったことがある回答者は同じように感じている人も多い)
m.ts10806

2020/05/02 01:36

で、何なら初心者じゃないんですか?「Javaは」と仰っていましたが、 自信がある言語をあげてみてください。別に批判なぞはしません。 「初心者じゃない言語を持ってる人のやり方ではない」のは皆分かってますから。
dodox86

2020/05/02 02:03

[asahina1979さんの指摘コメントより] maybe not public or not valid? [質問者aae_11さんのコメントより] > エラー内容は知っていますが、カラム「id」はエンティティクラスに存在していますよ。 エンティティクラス「MyData.java」の内容 > @Id > @GeneratedValue(strategy = GenerationType.AUTO) > @Column > private long id; privateになってますが。
退会済みユーザー

退会済みユーザー

2020/05/02 02:05

エラー内容をしっていたら別のエラーだとわかったはず ⇒ qiita の記事
Zuishin

2020/05/02 02:12

エラーメッセージを見ると Optional って書いてますが、中身を取り出してないんじゃ? 取り出しても結局 private みたいですけど。
rubytomato

2020/05/02 02:40

long型のidフィールドがprivateであることについては問題ないと思います。 thymeleafのspelで、th:value="*{id}" と参照した場合、期待されるのはそのオブジェクトのgetId()というゲッターメソッドです。記載されているMyDataクラスにpublicなgetIdメソッドが定義されているので、この部分が問題という訳ではないと思っています。 この問題の原因は、質問者の方がリンク先にあげているstack overflowに答えが載っているので回答はしませんが、他の方のご指摘どおりJavaの基本、特にOptional型の挙動について調べると解決に近づけると思います。
dodox86

2020/05/02 02:46

なるほど、私の指摘は不適切だったようです。訂正いただきましてありがとうございます。>rubytomatoさん
退会済みユーザー

退会済みユーザー

2020/05/02 03:05

とりあえず。その書籍で勉強するなら Spring Boot のバージョンは 1.x にしましょう。 2.x だと不適切です。
aae_11

2020/05/02 03:20

>この問題の原因は、質問者の方がリンク先にあげているstack overflowに答えが載っているので回答はしませんが、 こちら、stackoverflowの回答なのですが、「romService.findOne(id).ifPresent(o -> model.addAttribute("room", o));」このように記載がされていますが、今回の質問のケースにあてはめてみた所、「MyData data = repository.findById((long)id).ifPresent(o -> model.addAttribute("formModel", o));」このような形で試してみましたが、エラーは改善されませんでした。 どの部分を修正すれば良いでしょうか?
Zuishin

2020/05/02 03:29

情報を得た場合に取るべき手順はこうです。 1. 本文を読んで不具合の原因と対処法の理屈を理解する(理解できないところは調べる) 2. 出てきたオブジェクトの使用法を調べる(どのようなメソッドがあるか、使う際の注意点は何か) 3. 得られた知識をもとに自分の状況に合わせて自分でプログラムする 本文を読まず、使用法も調べず、載ってるコードをそのまま適用するようなことは決してしてはいけません。
退会済みユーザー

退会済みユーザー

2020/05/02 03:36

@Zuishin 質問者の参考書籍は「 Spring Boot 1.3.0 ( Spring 4.x ) : Spring Boot プログラミング入門」 質問者の記述構文は「 Spring Boot 2.x.x ( Spring 5.x ) 」 そもそも理解もしてないのに別のバージョンでやってるからね。この質問者
Zuishin

2020/05/02 04:04

それはなかなかハードな縛りプレイですね。
rubytomato

2020/05/02 04:06

> MyData data = repository.findById((long)id).ifPresent(o -> model.addAttribute("formModel", o)); 本当にこの書き方をしているのであればシンタックスエラーです。ifPresentメソッドは戻り値を返しません。 また、元のコードはModelAndViewクラスを使用しているので、Modelクラスに変えない限りmodel.addAttribute("formModel", o) という書き方も出来ないはずです。 stackoverflowの回答をそのまま鵜呑みにするのではなく、ご自身の状況にあわせて解釈する必要があると思います。
aae_11

2020/05/02 08:07 編集

modelAndViewインスタンスに変更をし、「repository.findById((long)id).ifPresent(o -> mav.addAttribute("formModel", o));」このような形でしょうか? 「ifPresent」のアロー演算子の前はメソッドだと調べた結果出てきたのですが、スタックオーバーフローの回答では、「o」と指定されていますが、oメソッドを事前に定義し、実行するという意味なのでしょうか?
Zuishin

2020/05/02 08:13

どこを調べたらそんな結果が出てくるんですか? 調べた場合にはちゃんとソースを確認してください。そして人に尋ねる時にはソースを添えてください。 前のコメントの Qiita の記事にしても、もう少しマシなのがいくつもあると思うんですが。
Zuishin

2020/05/02 08:22 編集

「メソッドの引数列」と書いてあります。メソッドとメソッドの引数列は違うものです。
Zuishin

2020/05/02 08:24

public static void main(String[] args) {} 上記がメソッドです。このうちの String[] args が引数列です。
aae_11

2020/05/02 08:29

なるほど。引数列というのですね
m.ts10806

2020/05/02 09:30

「基本を」って書いた途端見えなくなる都合の良い性質をお持ちなので10年たっても身に付くことはないでしょうね。 事実、身に付いてないし、そういう己と向き合ってないから。 プライドの高さが邪魔してるんでしょうか。
guest

回答1

0

自己解決

HeloController.javaのOptional<MyData> data = repository.findById((long) id);ここをMyData data = repository.findById((long)id).orElse(null);このようにし、オプショナルの値を取り出したら、エラーが解決しました。

投稿2020/05/17 10:19

aae_11

総合スコア178

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問