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

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

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

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

Thymeleaf

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

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

Q&A

解決済

1回答

7932閲覧

テーブルに表示したデータを編集し、全行一括で更新したい

rein

総合スコア9

Java

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

Thymeleaf

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

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

0グッド

0クリップ

投稿2020/03/06 05:55

編集2020/03/06 05:59

##やりたいこと
SpringBootとThymeleafでWEBアプリを開発しております。
テーブルの端にチェックボックスを用意し、ボタンを押すとチェックした項目をすべてDBから削除するような処理を作ろうとしています。
テーブルの表示まではできたのですが、Contorollerに受け渡すことができず質問させていただきました。
Excelのスクリーンショットですが完成イメージです↓
※削除ボタンを押すとDBから「tanaka」と「yamada」が削除されるイメージです。
イメージ説明

##ソースコード

Java

1import lombok.Data; 2 3@Data 4public class Person { 5 private int id; 6 private String name; 7 private int age; 8 private boolean checked; 9 10 public Person(int id, String name, int age, boolean checked) { 11 this.setId(id); 12 this.setName(name); 13 this.setAge(age); 14 this.setChecked(checked); 15 } 16} 17

Java

1import java.util.List; 2import lombok.Data; 3 4@Data 5public class PersonForm { 6 private List<Person> personList; 7} 8

Java

1//Controller 2@RequestMapping("/editPersonList") 3 public String editPersonList(Model model) { 4 Person person1 = new Person(1, "tanaka", 30, false); 5 Person person2 = new Person(2, "tanaka", 40, false); 6 Person person3 = new Person(3, "tanaka", 50, false); 7 8 List<Person> personList = new ArrayList<Person>(); 9 personList.add(person1); 10 personList.add(person2); 11 personList.add(person3); 12 13 PersonForm personForm = new PersonForm(); 14 personForm.setPersonList(personList); 15 16 model.addAttribute("personForm", personForm); 17 18 return "/editPersonList"; 19 } 20 21 @PostMapping("/updatePersonList") 22 public String updatePersonList(@ModelAttribute PersonForm personForm) { 23 // DB更新処理 24 System.out.println(personForm); 25 26 return "redirect:/top_page"; 27 }

html

1<!DOCTYPE html> 2<html lang="jp"> 3<html xmlns:th="http://www.thymeleaf.org"> 4 5<head> 6 <title>ユーザー編集</title> 7 <meta charset="UTF-8"> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 9 <link rel="stylesheet" type="text/css" href="/css/new_common.css"> 10</head> 11 12<body> 13 <div th:replace="header_design :: header_design"></div> 14 <div style="margin-top: 100px;">テスト用画面</div> 15 <p>ユーザ一覧</p> 16 <form th:action="@{/updatePersonList}" th:method="post" th:object="${personForm}"> 17 <table> 18 <thead> 19 <tr> 20 <td>ID</td> 21 <td>名前</td> 22 <td>年齢</td> 23 <td>削除フラグ</td> 24 </tr> 25 </thead> 26 <tbody> 27 <th:block th:each="person,stat : *{personList}"> 28 <tr> 29 <td><input type="text" th:field="*{personList[__${stat.index}__].id}"></td> 30 <td><input type="text" th:field="*{personList[__${stat.index}__].name}"></td> 31 <td><input type="text" th:field="*{personList[__${stat.index}__].age}"></td> 32 <td><input type="checkbox" th:field="*{personList[__${stat.index}__].checked}"></td> 33 <!-- ↓試したけどエラーが発生した--> 34 <!-- <td><input type="text" th:field="${person.id}"></td> 35 <td><input type="text" th:field="${person.name}"></td> 36 <td><input type="text" th:field="${person.age}"></td> 37 <td><input type="checkbox" th:field="${person.checked}"></td> --> 38 </tr> 39 </th:block> 40 </tbody> 41 </table> 42 <input type="submit" value="更新"> 43 </form> 44</body> 45 46</html>

##エラーメッセージ
文字数制限のため下の方を削っております。

This application has no explicit mapping for /error, so you are seeing this as a fallback. Fri Mar 06 14:45:23 JST 2020 There was an unexpected error (type=Internal Server Error, status=500). Invalid property 'personList[0]' of bean class [com.example.mistuto.model.PersonForm]: Illegal attempt to get property 'personList' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'personList' of bean class [com.example.mistuto.model.PersonForm]: Could not instantiate property type [com.example.mistuto.model.Person] to auto-grow nested property path; nested exception is java.lang.NoSuchMethodException: com.example.mistuto.model.Person.<init>() org.springframework.beans.InvalidPropertyException: Invalid property 'personList[0]' of bean class [com.example.mistuto.model.PersonForm]: Illegal attempt to get property 'personList' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'personList' of bean class [com.example.mistuto.model.PersonForm]: Could not instantiate property type [com.example.mistuto.model.Person] to auto-grow nested property path; nested exception is java.lang.NoSuchMethodException: com.example.mistuto.model.Person.<init>() at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:707) at org.springframework.beans.AbstractNestablePropertyAccessor.getNestedPropertyAccessor(AbstractNestablePropertyAccessor.java:839) at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyAccessorForPropertyPath(AbstractNestablePropertyAccessor.java:816) at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:256) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:97) at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:848) at org.springframework.validation.DataBinder.doBind(DataBinder.java:744) at org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:197) at org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:107) at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.bindRequestParameters(ServletModelAttributeMethodProcessor.java:158) at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:160) at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) 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:660) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

参考にさせて頂いたサイト
https://area-b.com/blog/2015/02/04/2009/

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

SpringBootについては詳しくないので試していませんが、Java的にみれば
Personクラスに引数付きのコンストラクタが定義されたことで、
引数を不要とするデフォルトのコンストラクタがリフレクションできなくなります。
フレームワーク側でPersonのインスタンスをデフォルトのコンストラクタで生成しようとして失敗したのではないでしょうか?
Personクラスにデフォルトのコンストラクタを追加してみてはどうでしょう。

java

1public Person() {}

エラーのこのあたりから推測

java.lang.NoSuchMethodException: com.example.mistuto.model.Person.<init>()

投稿2020/03/06 07:55

編集2020/03/06 07:58
storm3

総合スコア330

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

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

rein

2020/03/09 04:49

ご回答ありがとうございます。 頂いた内容でエラーを解消することができました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問