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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Java

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Spring Boot

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

Q&A

解決済

1回答

4687閲覧

JAVAで作っているショッピングサイトの履歴がうまく表示できない。

sodium_chem

総合スコア2

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Java

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Spring Boot

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

0グッド

0クリップ

投稿2020/06/04 16:04

編集2020/06/04 22:07

前提・実現したいこと

JAVA(SpringToolSuite4でショッピングカート風なシステムを作っています。
履歴を表示したいのですが、<tbody>内の構文がうまくかけず、すべての履歴が表示されず、表示しても最新で購入したもののみの履歴しか表示されません。
今回、実現したいことは、履歴をすべて表示させることです。
お手隙の際にご教授いただければ幸いです。

書いたコード①

IndexController.java

java

1@ResponseBody 2 @PostMapping("/api/history") 3 public String historyApi(@RequestBody HistoryForm form) { 4 String userId = form.getUserId(); 5 List<Purchase>history = purchaseRepos.findHistory(Long.parseLong(userId)); 6 List<HistoryDto> historyDtoList = new ArrayList<>(); 7 history.forEach((v) ->{ 8 HistoryDto dto = new HistoryDto(v); 9 historyDtoList.add(dto); 10 }); 11 12 return gson.toJson(historyDtoList); 13 }

HistoryDto.java

java

1public class HistoryDto { 2 3 private long id; 4 5 private long userId; 6 7 private long goodsId; 8 9 private String goodsName; 10 11 private long itemCount; 12 13 private long total; 14 15 private String createdAt; 16 17 public HistoryDto() {} 18 19 public HistoryDto(Purchase entity) { 20 this.id = entity.getId(); 21 this.userId = entity.getUserId(); 22 this.goodsId = entity.getGoodsId(); 23 this.goodsName = entity.getGoodsName(); 24 this.itemCount = entity.getItemCount(); 25 this.total = entity.getTotal(); 26 27 Timestamp d =entity.getCreatedAt(); 28 SimpleDateFormat f = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); 29 this.createdAt = f.format(d); 30 } 31 32 public HistoryDto(long id, long userId, long goodsId, String goodsName,long itemCount,long total,String createdAt) { 33 this.id = id; 34 this.userId = userId; 35 this.goodsId = goodsId; 36 this.goodsName = goodsName; 37 this.itemCount = itemCount; 38 this.total = total; 39 this.createdAt = createdAt; 40 } 41 42 public long getId() { 43 return id; 44 } 45 public void setId(long id) { 46 this.id = id; 47 } 48 49 public long getUserId() { 50 return userId; 51 } 52 public void setUserId(long userId) { 53 this.userId = userId; 54 } 55 56 public long getGoodsId() { 57 return goodsId; 58 } 59 public void setGoodsId(long goodsId) { 60 this.goodsId = goodsId; 61 } 62 63 public String getGoodName() { 64 return goodsName; 65 } 66 public void setGoodsName(String goodsName) { 67 this.goodsName = goodsName; 68 } 69 70 public long getItemCount() { 71 return itemCount; 72 } 73 public void setItemCount(long itemCount) { 74 this.itemCount = itemCount; 75 } 76 77 public long getTotal() { 78 return total; 79 } 80 public void setTotal(long total) { 81 this.total = total; 82 } 83 84 public String getCreatedAt() { 85 return createdAt; 86 } 87 public void setCreatedAt(String createdAt) { 88 this.createdAt = createdAt; 89 } 90}

書いたコード②(問題となる部分)

Index.html

html

1 2<button id="buyBtn">購入</button> 3  <button id="historyBtn">履歴</button> 4</fieldset> 5 6<div id="history" title="購入履歴" style="display:none;"> 7<table id="historyTable"> 8 <thead> 9 <tr> 10 <th>商品名</th><th>注文数</th><th>購入日時</th> 11 </tr> 12 </thead> 13 <tbody> 14 <tr th:each="item : ${historyDtoList}"> 15 <td th:text="${item.goodsName}"/> 16 <td th:text="${item.itemCount}" /> 17 <td th:text="${item.createdAt}" /> 18 </tr> 19 20 21 </tbody> 22</table>

書いたコード③

common.js

jquery

1 2 3let showHistory = () => { 4 $.ajax({ 5 type:'POST', 6 url: '/ecsite/api/history', 7 data: JSON.stringify({ "userId": $('#hiddenUserId').val()}), 8 contentType: 'application/json', 9 datatype: 'json', 10 scriptCharset: 'utf-8' 11 }) 12 .then((result) => { 13 let historyList = JSON.parse(result); 14 let tbody = $('#historyTable').find('tbody'); 15 $(tbody).children().remove(); 16 historyList.forEach((history, index) => { 17 let tr = $('<tr />'); 18 19 $('<td />',{ 'text': history.goodsName}).appendTo(tr); 20 $('<td />',{ 'text': history.itemCount}).appendTo(tr); 21 $('<td />',{ 'text': history.createdAt}).appendTo(tr); 22 23 $(tr).appendTo(tbody); 24 }); 25 $("#history").dialog("open"); 26 },() => { 27 console.error('Error: ajax connection failed.'); 28 } 29 ); 30 };

補足情報

SpringToolSite4(sts4.5.1)を使用
java側でのforEachがきちんと機能せず、webのコンソールで確認した結果
tbody内は書かれてないことになってます。

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

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

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

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

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

m.ts10806

2020/06/04 21:26

>SpringBoot4.0 最新は2.3のはずですが… https://spring.io/projects/spring-boot あと、Java側でforEachがきちんと想定回数まわってるか確認してみてください。 HistoryDtoの定義も提示してください
m.ts10806

2020/06/04 21:28

ただ、JavaScriptで作るならThymeleaf側のループは意味がないのでは…?
sodium_chem

2020/06/04 22:09

バージョンがSpringToolSite4になります。 java側でのforEachがきちんと機能せず、webのコンソールで確認した結果 tbody内は書かれてないことになってます。
m.ts10806

2020/06/04 22:26

>バージョンがSpringToolSite4になります。 それはIDEのバージョンであってフレームワーク自体のバージョンではないですね。おそらくなにもしなければSpringBoot2の最新だと思います >java側でのforEachがきちんと機能せず、 想定回数回っているか確認してください。デバッグです。コードもデータも全て提示されているわけではないので、こちらで確認はできません。 findHistoryの結果を確認するところからですね
guest

回答1

0

自己解決

findHistory に入っていたSQL文の部分がSELECT MAXとなっていたため、最新の情報しか取得できませんでした。SQL文の誤りです。
また、Thymeleaf側のループは、意味がないため、取り消しました。

java

1SELECT MAX(created_at) 2

投稿2020/06/05 11:43

sodium_chem

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問