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

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

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

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

JavaScript

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

Thymeleaf

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

Q&A

解決済

2回答

6083閲覧

thymeleafで何度もページを更新する場合の正攻法

tera78

総合スコア9

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

JavaScript

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

Thymeleaf

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

0グッド

0クリップ

投稿2017/04/30 02:03

###前提
SpringMVC+thymeleafにて、検索画面を作っています。
検索条件のフォームと、検索結果のリストの画面構成です。
検索条件の一部に、マスタから取得したドロップダウンボックスがあります。
検索テンプレート内のドロップダウンボックス、検索結果リストはth:eachで展開をさせるためのセレクターを用意しています。

初期遷移時、ドロップダウンボックスにマスタを詰めてあげる必要があるので、DBアクセスしてマスタを取得し、返却するModelにマスタをAddAttributeしてテンプレート名を返却します。検索結果リストは空なので、検索結果のヘッダ項目リストだけ出る動きです。

検索実行して、リストをModelに追加してテンプレート名を返却すると、検索結果リストは展開されますが、ドロップダウンリストが空の状態になってしまいました。
こういう場合、テンプレート名を返却する度に必要なマスタをいちいち取得して詰めてあげないといけないのでしょうか?その際、ドロップダウンボックスの選択位置も設定しないといけないので、非常に面倒です。
そう思って以下の施策をやりました。

①検索結果リストを別テンプレート(fragment)にし、検索結果を返す際に、リストのfragment名を返すようにした→リストのみの画面になってしまったのでNG
②検索結果を返す際は、テンプレート名でなく、検索リストを返すようにして、JSで検索リストのみを構築する→検索フォームも初期化されず、マスタを取ってくる必要もありません。

現状は②のやり方をしてますが、その後別の方が画面共通のページャのテンプレート(fragment)を作って頂き、それはありがたいのですが、②のやり方ではそのページャを画面に組み込む事が出来ません。
結局冒頭に記述したように、テンプレートを返却する際に必要なものを全てModelに詰めてあげるやり方しか無いのでしょうか?よっぽどシンプルな画面でない限りこの問題が付きまとうと思うのですが、みなさんどうしているのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

  • マスタを取得した際にキャッシングしておいて画面に返却時にその値を使う
  • 検索実行時に画面のリストの内容を投げてそれをそのまま返却する

って感じですかね

最近のWEB開発は画面全部の再ロードを行わず、非同期で必要部分のみJSONでやりとりすることでこういった問題を解決していると思います。

投稿2017/05/02 00:51

7tsuno

総合スコア310

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

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

tera78

2017/05/09 13:46

回答ありがとうございます。 キャッシングはセッション等に持つという事でしょうか? リストの内容を返すという事は、結局JSで画面の一部を構築するという事でしょうか?
sllmejacob

2017/05/18 03:06

横からですが。 > キャッシングはセッション等に持つという事でしょうか? セッションもそうですし、コントローラのクラスやメンバー変数にリストの内容を保持してそれを返すということでしょうね。 > リストの内容を返すという事は、結局JSで画面の一部を構築するという事でしょうか? 元の回答では『リストの内容を投げて』と言っているので、この例ではGET/POSTのパラメタとしてリストデータを送る(受け取ったリストデータを元に再度画面のリストを作り直す)ということでしょう。 『非同期で必要部分のみJSONで…』というくだりが、JSで非同期アクセスして画面の一部を構築するという事を示しています。 リスト内容が特段変化しないものであれば、キャッシュ化で処理するのがよいのではと思います。
7tsuno

2017/05/18 04:25

ごめんなさい質問に気付いていませんでした。 sllmejacobさんの回答していただいたとおりです。ありがとうございます。
guest

0

既にベストアンサーが出ていますが、補足を。

Thymeleaf+Springの構成の場合、Thymeleafテンプレート内からSpring管理にあるbeanのアクセスが可能です。
具体的には、データベースやその他マスターデータとなるRepository層からデータを取得するService層のbeanをThymeleafテンプレート内から呼び出し、表示したい内容を出力ができます。

View層から直接Repositoryの内容を参照するのはやや行儀が悪いですし、このままだとThymeleafテンプレートから毎回別途データベースアクセスが発生するようになってしまいますが、現在のSpringにはキャッシュ機構が標準で利用できますので、Repositoryの内容をキャッシュしておけば、毎回データベースアクセスすることはなく、かつ複数の画面で全く同じクエリを実装するといったことはなくなるでしょう。

ご参考までに。https://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html

投稿2017/05/18 04:37

A-pZ

総合スコア12011

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

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

tera78

2019/09/13 08:18

ありがとうございます。Springのキャッシュ機構という事はヒープ領域を使うという事ですかね? サポートされているJCash、外部サービスのmemcachedの比較記事などないですかね?
A-pZ

2019/09/17 02:37

標準であればオンメモリであり、分散環境で共有したい場合などには別途キャッシュサービスを利用するので簡単に実現できる機構になっています。比較したい内容次第で調べる内容が多岐にわたりますので、残念ですがお答えにくいです。
tera78

2019/09/17 02:58

迅速に回答頂きありがとうございます。キャッシュライブラリも多岐に渡り、ストレージも選択できそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問