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

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

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

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

Thymeleaf

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

Spring Boot

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

Q&A

解決済

1回答

464閲覧

htmlからjavaへリスト型のデータを渡したい

ngk10

総合スコア7

Java

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

Thymeleaf

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

Spring Boot

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

0グッド

0クリップ

投稿2024/06/11 06:04

編集2024/06/11 07:25

前提

springbootとthymeleafを使って、注文システムを作っています。
htmlからControllerへリストを渡したいのですがうまくいきません。
送信ボタンを押すと後述のエラーが返ってきます。

・画面表示までは問題なくできる
・th:fieldをth:valueに変更すると、送信ボタンが機能し、ヘッダー登録ができる。
・orderControllerの宣言文にブレークポイントをはってもエラー画面が返ってくる

以上のことから、postの際のバインドがうまくいっていないのではと考えているのですが、具体的な解決方法がわかりません。

実際はリストをcontrollerに返した後、DBに登録を行うのですが、その部分は未実装です。
とりあえず、ボタンを押して値が返るところまで作成したいと思っています。

お力添えいただけますと幸いです。

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

java.lang.NoSuchMethodException: com.example.jrOrder.entity.product.<init>()

該当のソースコード

controller

1 2@Controller 3public class mainController { 4 5 @Autowired 6 private orderService orderService; 7 8 //注文完了 9 @PostMapping("/orderComplete") 10 public String orderController(@ModelAttribute orderForm orderForm, Model model){ 11 12 //ヘッダー登録 13 LocalDateTime ldt = LocalDateTime.now(); 14 15 DateTimeFormatter orderNoFormat = 16 DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); 17 DateTimeFormatter orderDateFormat = 18 DateTimeFormatter.ofPattern("yyyy-MM-dd"); 19 orderForm.setOrderNo(orderNoFormat.format(ldt)); 20 orderForm.setOrderDate(orderDateFormat.format(ldt)); 21 orderForm.setStatas("未承認"); 22 orderForm.setEmail(loginUserGetter.getUsername()); 23 24 orderService.insertOrder(orderForm); 25 26 //明細登録(未実装) 27 28 29 return "complete"; 30 }

form

1@Data 2public class orderForm { 3 private int CategoryCd; 4 private List<category> categoryList; 5 private List<product> productList; 6 private String statas; 7 private String email; 8 9 private String orderDate; 10 private String orderNo; 11}

entity

1 2@Data 3public class product { 4 5 private final String name; 6 private final String categoryName; 7 private final String quantity; 8 private final String productCode; 9 private final String subCategoryName; 10}

html

1<form th:action="@{/orderComplete}" th:object="${orderForm}" method="post" > 2 3<article> 4<div class="side"> 5 <div class="row form-horizontal"> 6 <div class="col-sm-12"> 7 <h4 class="clear hidden-sm hidden-xs">商品分類</h4> 8 <div class="bs-component"> 9 <div class="list-group"> 10 <div th:each="productCategoryS : *{categoryList}"> 11 <a 12 13 th:href="@{/order/product(categoryCd=${productCategoryS.categoryCd})}" 14 class="list-group-item list-group-item-warning" 15 th:text="${productCategoryS.name}" 16 th:name="categoryCd"> 17 </a> 18 19 </div> 20 </div> 21 </div> 22 </div> 23 </div> 24</div> 25 26 27 28<!-- 一覧 --> 29<div class="content"> 30<div class="upbar"> 31<label>数量 32<input type="number" th:value="1" th:id="order" min="1" max="10" step="1"> 33</label> 34<input type="button" th:id="quantitybutton" th:value="反映"> 35</div> 36 37<br> 38 39<div class="pb-3 px-3 flex-grow-1 overflow-hidden" style="height: 100%"> 40 <!-- 検索結果 --> 41 <div class="table-fixed-header"> 42 <table class="table table-sm table-striped m-0" id="table"> 43 <col width="10%"/> 44 <col width="15%"/> 45 <col width="15%"/> 46 <col width="50%%"/> 47 <thead> 48 <tr> 49 <th class="productNumber">品番</th> 50 <th class="productName">製品名</th> 51 <th class="productQuantity">装備数</th> 52 <th class="orderQuantity">発注数量</th> 53 </tr> 54 </thead> 55 <tbody> 56 57 <tr th:each="productList,stat : *{productList}" > 58 <td> 59 <label th:text="${productList.productCode}"></label> 60 <input type="hidden" th:field="*{productList[__${stat.index}__].productCode}"> 61 </td> 62 <td> 63 <label th:text="${productList.name}"></label> 64 <input type="hidden" th:field="*{productList[__${stat.index}__].name}"> 65 </td> 66 <td> 67 <label th:text="${productList.quantity}"></label> 68 <input type="hidden" th:field="*{productList[__${stat.index}__].quantity}"> 69 </td> 70 <td align="center"> 71 <div th:class="buttonContent"> 72 <button type="button" class="downbutton"></button> 73 <input type="text" th:field="*{productList[__${stat.index}__].quantity}" class="inputtext"> 74 <button type="button" class="upbutton"></button> 75 </div> 76 </td> 77 </tr> 78 </tbody> 79 </table> 80 81 <div class="position-sticky top-100 start-0 py-2"> 82 83 </div> 84 </div> 85 </div> 86 87 88<input th:id="submit" type="submit" th:value="送信"> 89</form> 90

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

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

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

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

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

jimbe

2024/06/11 18:43 編集

コードのマークダウンで今 controller や form 等と書かれている所は、言語名を書くところです。囲っている内容に合わせてこの場合は java としてください。また、 html もファイル毎にマークダンを分け、ファイル名をマークダウンの外に書いてください。 product クラスは、提示されているのが (product.java ファイルの)省略無く全てでしょうか。 ついでに、質問とは関係無いかもしれませんが、 java ではクラス名は大文字始まり変数は小文字始まりが推奨されます。変数名と区別を付け易くするためにも、命名規則を気にされたほうが良いと思います。 (スペルミスも…"ステータス"は status では?)
guest

回答1

0

ベストアンサー

java.lang.NoSuchMethodException: com.example.jrOrder.entity.product.<init>()

コードが何をしようとしているかはともかく、エラーメッセージを見る限り『 product クラスにデフォルトコンストラクタ (引数が一つも無いコンストラクタ) が無い』と言われています。

実際提示されている product クラスには定義されていません。ですのでデフォルトコンストラクタを定義するか、 lombok の @NoArgsConstructor アノーテーションが使えるでしょう。

また、デフォルトコンストラクタを定義した場合、 product クラスの各フィールドが final になっていると、恐らくエラー発生元がやろうとしているであろう『デフォルトコンストラクタでオブジェクトを生成した後に各フィールドに値を設定する』ことが出来ませんので、 final を外す必要もあるでしょう。

つまり product クラスの定義を以下のようにすることになると思います。
※実行環境がありませんので動作確認はしていません。

java

1@Data 2@NoArgsConstructor 3public class product { 4 private String name; 5 private String categoryName; 6 private String quantity; 7 private String productCode; 8 private String subCategoryName; 9}

もしかしたら final フィールドが無ければ @Data の内包する @RequiredArgsConstructor でデフォルトコンストラクタが作られて、 @NoArgsConstructor は要らない可能性…

投稿2024/06/11 18:24

編集2024/06/11 19:01
jimbe

総合スコア13057

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

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

ngk10

2024/06/12 05:37

jimbe様、以前はお世話になりました。 仰る通り、finalを消すことで期待通りの挙動をするようになりました。 マークダウンの記述方式や命名規則についてもご助言ありがとうございます。 今後気をつけます。 この度も大変お世話になりました。 ご回答いただきありがとうございました。
jimbe

2024/06/12 05:57

>finalを消すことで期待通りの挙動をするようになりました あ、やっぱり @NoArgsConstructor は無くても良かったですか。 ありがとうございます、お疲れさまでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問