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

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

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

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

Q&A

解決済

1回答

932閲覧

thymeleafでDBに登録しているデータを全て表示したい

monkari

総合スコア4

Spring Boot

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

0グッド

0クリップ

投稿2022/02/13 03:33

表題の件について、現在エラーが発生しており、実現ができておりません。
状況として、
コントローラーの「model.addAttribute("items",itemsRepository.findAll());」を記載しているとエラーになります。
そこで「model.addAttribute("items",itemsRepository.findAll());」の記載を外すと画面は表示できますが、最後に登録したデータしか表示されません。

確認したいことは下記の2点です。
・「model.addAttribute("items",itemsRepository.findAll());」がエラーになる原因、またその解決方法
・最後に登録したデータだけではなく、登録したデータを全て表示する方法

下記にコードを記載致しますので、どこに誤りがあるかご教示いただけますでしょうか。

コントローラー

package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import com.example.demo.model.Items; import com.example.demo.repository.ItemsRepository; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Controller public class SirenController { private final ItemsRepository itemsRepository; @GetMapping("/") public String index(@ModelAttribute Items items,Model model) { model.addAttribute("items",itemsRepository.findAll()); return "index"; } @PostMapping("/add") public String addItems(@ModelAttribute Items items,Model model) { itemsRepository.save(items); model.addAttribute("items",itemsRepository.findAll()); return "index"; } }

ビュー

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <link th:href="@{/webjars/bootstrap/css/bootstrap.min.css}" rel="stylesheet"> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <div class="row"> <div class="col"> 草 </div> <div class="col"> 壺 </div> <div class="col"> 腕輪 </div> <div class="col"> 杖 </div> </div> <div> <form th:action="@{/add}" th:object="${items}" method="post"> <label for ="typeno">武器種No</label> <input type=number th:field="*{typeno}"> <br> <label for ="name">名称</label> <input type=text th:field="*{name}"> <br> <label for ="price">値段</label> <input type=number th:field="*{price}"> <br> <button>登録</button> </form> </div> <div th:each="item:${items}"> <div> [[${item.No}]] [[${item.typeno}]] [[${item.name}]] [[${item.price}]] </div> </div> <script th:src="@{/webjars/bootstrap/js/bootstrap.bundle.min.js}"></script> </body> </html>

モデル

package com.example.demo.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import lombok.Getter; import lombok.Setter; @Getter @Setter @Entity public class Items { @Id @GeneratedValue private long No; //@ManyToOne private int typeno; private String name; private int price; }

リポジトリ

package com.example.demo.repository; import org.springframework.data.jpa.repository.JpaRepository; import com.example.demo.model.Items; public interface ItemsRepository extends JpaRepository<Items,Long> { }

データローダー

package com.example.demo.config; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import com.example.demo.model.Items; import com.example.demo.repository.ItemsRepository; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Component public class DataLoader implements CommandLineRunner{ private final ItemsRepository itemsRepository; @Override public void run(String... args)throws Exception { Items items =new Items(); items.setTypeno(2); items.setName("カタナ"); items.setPrice(10200); itemsRepository.save(items); } }

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

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

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

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

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

m.ts10806

2022/02/13 04:17

エラーとは? コピペして提示してください。
monkari

2022/02/13 05:17

お返事いただきありがとうございます。 下記に貼り付けます。 また、情報に不足等あればお手数ですがご指摘ください。 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sun Feb 13 14:16:25 JST 2022 There was an unexpected error (type=Internal Server Error, status=500). An error happened during template parsing (template: "class path resource [templates/index.html]") org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/index.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:366) at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1401) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter.doFilter(ResourceUrlEncodingFilter.java:67) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: org.attoparser.ParseException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "index" - line 26, col 22) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393) at org.attoparser.MarkupParser.parse(MarkupParser.java:257) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ... 51 more Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "index" - line 26, col 22) at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:117) at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) at org.thymeleaf.engine.ProcessorTemplateHandler.handleStandaloneElement(ProcessorTemplateHandler.java:918) at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleStandaloneElementEnd(TemplateHandlerAdapterMarkupHandler.java:260) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleStandaloneElementEnd(InlinedOutputExpressionMarkupHandler.java:256) at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleStandaloneElementEnd(OutputExpressionInlinePreProcessorHandler.java:169) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleStandaloneElementEnd(InlinedOutputExpressionMarkupHandler.java:104) at org.attoparser.HtmlVoidElement.handleOpenElementEnd(HtmlVoidElement.java:92) at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(HtmlMarkupHandler.java:297) at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402) at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159) at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ... 53 more Caused by: org.springframework.beans.NotReadablePropertyException: Invalid property 'typeno' of bean class [java.util.ArrayList]: Bean property 'typeno' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:627) at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:617) at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:158) at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903) at org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext.getBindStatus(SpringWebMvcThymeleafRequestContext.java:227) at org.thymeleaf.spring5.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:306) at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:253) at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:227) at org.thymeleaf.spring5.processor.AbstractSpringFieldTagProcessor.doProcess(AbstractSpringFieldTagProcessor.java:174) at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) ... 66 more
m.ts10806

2022/02/13 05:24

質問は編集できるので本文に追記してください
monkari

2022/02/13 05:38

お返事いただきありがとうございます。 編集できることは分かりましたが、文字数の関係でエラー内容を質問に加えることが出来ない状況です。 お手数おかけしますが、上記記載のほうで確認できませんか。
m.ts10806

2022/02/13 05:50

全部入れ込む必要はないとは思いますが、thymeleafのエラーは色々パースが先に来てるので本当に見るべき場所が真ん中あたりなのが難ですね。
guest

回答1

0

ベストアンサー

エラーメッセージにエラー行数とその行でエラーが検知された列番号が出てますね。

'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "index" - line 26, col 22)

26行目ここ

24 <form th:action="@{/add}" th:object="${items}" method="post">
25 <label for ="typeno">武器種No</label>
26 <input type=number th:field="*{typeno}">

列番22はth:のところ。

th:objectで指定すると同じスコープ内はそのオブジェクトが持つフィールドやメソッドなどを*{}としてオブジェクトを省略してアクセスできるようになりますが、ここで指定されているobjecrtの${items}はfindAll()の処理結果であってfindAll()はそもそもList<>を返すので、items直下にそのままtypenoフィールドがあるわけではないです。(get(列番)のように明示するかeachで全件取り出すか)

ただ、そもそもformに渡すオブジェクトはItemsモデルで、一覧出すためにのfindAllの結果を保持しているキーと混同されてしまっているように思います。

投稿2022/02/13 05:48

m.ts10806

総合スコア80888

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

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

monkari

2022/02/13 10:44

結構悩みましたが、解決できました。 ご教示いただきありがとうございます。
m.ts10806

2022/02/13 11:01

どこでエラー出てるのかエラーメッセージから見つけるのはそれなりにコツがいるので、 根気よく読んでみると良いかもしれません(大抵最初か真ん中)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問