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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Thymeleaf

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

Spring Boot

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

Q&A

解決済

2回答

13919閲覧

SpringからAjaxにListを送ってHTML(thymeleaf)にtableで表示したい

takahiro00

総合スコア84

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Thymeleaf

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

Spring Boot

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

0グッド

1クリップ

投稿2018/12/04 10:29

編集2018/12/04 11:31

前提・実現したいこと

SpringからAjaxにList型の値を送って、それをHTML(thymeleaf)上にtableで表示したいのですが、
どうもやり方がよく分かりません

該当のソースコード

javascript

1/** 2 * 基本給登録ページ 3 */ 4function monthsSelect(obj){ 5 var objVar = obj.value; 6 $.ajax({ 7 type : "GET", 8 url : "baseSalaryMonth", 9 data: { 10 baseSalaryMonthStr: objVar 11 }, 12 dataType : "json" 13 }) 14 .then( 15 function (data) { 16 //通信成功 17 alert("読み込み成功"); 18 $('#baseSalaryList').val(data); 19 }, 20 function () { 21 //通信失敗 22 alert("読み込み失敗"); 23 }); 24} 25}

java

1 @RequestMapping(value = "/baseSalaryMonth" , method = RequestMethod.GET) 2 @ResponseBody 3 public List<BaseSalary> baseSalarySelectMonth(String baseSalaryMonthStr, ModelAndView mav)throws JsonParseException, JsonMappingException, IOException{ 4 System.out.println(baseSalaryMonthStr); 5 int aseSalaryMonth = Integer.parseInt(baseSalaryMonthStr); 6 List<BaseSalary> baseSalaryList = baseSalaryService.baseSalary(aseSalaryMonth); 7 return baseSalaryList; 8 }

html

1<!DOCTYPE html> 2<html lang="ja" xmlns:th="http://www.thymeleaf.org" 3 xmlns:sec="http://www.thymeleaf.org/extras/spring-security4"> 4<head> 5<meta charset="UTF-8"> 6<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 7<script src="/js/sampleJs.js" th:src="@{/js/baseSalary.js}"></script> 8</head> 9<body> 10 <table> 11 <tr><th>カラム1</th><th>カラム2</th><th>カラム3</th></tr> 12 <tr th:each="obj : ${baseSalaryList}"> 13 <td th:text="${obj.userId}"></td> 14 <td th:text="${obj.fullNm}"></td> 15 <td th:text="${obj.baseSalary}"></td> 16 </tr> 17 </table> 18</body> 19</html>

Ajaxからhtmlにlist型の値を渡して、
<table>
<tr><th>カラム1</th><th>カラム2</th><th>カラム3</th></tr>
<tr th:each="obj : ${baseSalaryList}">
<td th:text="${obj.userId}"></td>
<td th:text="${obj.fullNm}"></td>
<td th:text="${obj.baseSalary}"></td>
</tr>
</table>
こういう感じでtableは作れないものでしょうか
ご教授お願いいたします。

補足情報(FW/ツールのバージョンなど)

java8
SpringBoot2.0
jquery1.9.1

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

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

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

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

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

guest

回答2

0

アプローチの方法を変えた方が良いかと思います。テーブルの内容を表示したいHTMLからjQueryのload関数を使えば、特定の要素を非同期に切り替えが可能です。

html

1<div> 2テーブル出力 3<div id="target"> 4</div> 5</div> 6 7<input type="button" id="display" class="btn btn-success" value="テーブル表示"> 8 9<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 10<script> 11$('#display').on('click' ,function() { 12 $('#target').load("tableDisplay #table"); 13}); 14</script>

このような表示元となるHTMLに、jQueryのload関数を使って、tableDisplayの #table 要素の中身だけを入れ替えます。適宜パラメータや送信したいデータを追加してください。

これに対して受け取るController側は単純にThymeleafの結果を返すだけです。

java

1import java.util.ArrayList; 2import java.util.List; 3 4import org.springframework.stereotype.Controller; 5import org.springframework.web.bind.annotation.GetMapping; 6import org.springframework.web.servlet.ModelAndView; 7 8import com.github.apz.springsample.model.Result; 9 10@Controller 11public class TableController { 12 13 @GetMapping("/table") 14 public String display() { 15 return "table"; 16 } 17 18 @GetMapping("/tableDisplay") 19 public ModelAndView table(ModelAndView mnv) { 20 21 List<Result> results = new ArrayList<Result>() {{ 22 add(Result.builder().number(1).name("abc").build()); 23 add(Result.builder().number(2).name("ddd").build()); 24 add(Result.builder().number(3).name("eee").build()); 25 add(Result.builder().number(4).name("fff").build()); 26 add(Result.builder().number(5).name("xyz").build()); 27 }}; 28 29 mnv.addObject("results", results); 30 mnv.setViewName("tableDisplay"); 31 32 return mnv; 33 } 34}

tableDisplayで表示されるHTMLテンプレートは、例えば以下のようなものです。

html

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8" /> 5</head> 6 7<body> 8<table id="table" class="table table-bordered"> 9<thead> 10 <tr> 11 <th>number</th> 12 <th>name</th> 13 </tr> 14 <tr th:each="result : ${results}"> 15 <td>[[${result.number}]]</td> 16 <td>[[${result.name}]]</td> 17 </tr> 18</thead> 19 20</table> 21</body> 22</html>

こうすると、元画面のボタンを押すと、テーブルのHTMLが差し込まれます。

投稿2018/12/04 17:34

A-pZ

総合スコア12011

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

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

takahiro00

2018/12/06 03:37

ご回答ありがとうございます。 他に色々処理があったので、別のやり方で実装したのですが、 参考になりました!
guest

0

ベストアンサー

ajaxでと言っているということは画面遷移が発生しないのでthymeleafのレンダリングは出来ないと思います。Thymeleafは画面遷移時にHTMLを生成するものだからです。

画面に表示するのが目的であればajaxの返り値を使ってJavascriptで表示することになります。

投稿2018/12/04 12:00

euledge

総合スコア2404

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

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

takahiro00

2018/12/04 12:11

ご回答ありがとうございます。 そうなのですね javascriptで試行錯誤して作ってみます
takahiro00

2018/12/06 03:36

javascript内でtableを作成する方法でできました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問