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

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

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

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

HTML

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

Q&A

解決済

1回答

29213閲覧

thymeleafのブロック変数に代入

maryumo

総合スコア11

Thymeleaf

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

HTML

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

0グッド

1クリップ

投稿2017/01/12 01:28

###前提・実現したいこと
thymeleafのth:withで設定した変数の値を書き換えたい場合はどうすればいいでしょうか?
おそらくイレギュラーな使い方だと思いますが・・

###例えば

html

1<th:block th:with="param=${abc}"> 2 <th:block th:if="条件:true"> 3 <!-- ここでparamに別の値を代入して使いたい --> 4 </th:block> 5</th:block>

解決策をご教授いただけますよう、お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

私も気になっていたのですが、viewが少なく回答が付くのか心配だったので、以前同じ事をしようとしたときに諦めた私の回答を載せておきます・・・。
私が調べた限り、th:withで一旦定義した値を書き換える術は見つからなかったので、その方法は無いと判断しました。
対応として以下の3つを考えましたが、代入前の値と再代入前の値両方参照して何かしたい場合はどうしても冗長な記述になってしまいますね・・・。
質問者様が値を再代入した上でどういった処理を行いたいのかまで書いていただければ再代入せずに実現する方法を見つけることもできるかもしれません。
こんな回答でごめんなさい。識者の方が現れるのを期待してます。
###1. 定義時に条件を判定してを定義する

html

1<th:block th:with="x=(${条件:true} ? ${100} : ${200})"> 2 <p th:text="${x}"></p> 3</th:block>

withで代入する際に三項演算子を利用して代入する値を判断しています。
この場合条件がtrueであればxに100が、falseなら200が入ります。

###2. もう1つブロックを作ってそこで処理する

html

1<th:block th:with="x=${100}"> 2 <th:block th:if="true" th:with="x=${200}"> 3 <p id="1" th:text="${x}"></p> 4 </th:block> 5 <p id="2" th:text="${x}"></p> 6</th:block>

再代入が無理な前提で条件ごとに値と処理を定義します。
id="1"のpタグには200が表示されますが、再代入できてるわけではないのでid="2"のpタグには100が表示されます。
###3.Thymeleafに値を渡す際に値を二つ渡す
代入前の値と再代入後の値に当たるものを二つ用意してThymeleafに渡します。
元も子もないですが。

投稿2017/01/12 07:32

koronatail

総合スコア433

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

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

maryumo

2017/01/12 09:24

ご回答ありがとうございます。 やはり別の方法で検討するしかないようですね・・ 今回の件では、多重ループの中で動的に値を保持したいがために変数を使おうと思った次第です。 (SpringMVC+thymeleafの組み合わせです。) 「変数」なのに再代入ができないとはおかしな話だなぁと思いつつ・・ 渡す値を増やすか、そもそも整形して渡してやるしかなさそうですね。
koronatail

2017/01/12 09:53

>maryumoさん 「変数」なのに再代入できないってまさにその通りですよね・・・。 暇つぶしに調べていたらこんなものを見つけました。 一応それっぽいことができると書いてあるので参考にしてみたらどうでしょうか。 http://stackoverflow.com/questions/34804079/how-to-change-value-of-a-variable-in-thymeleaf 一番目の回答を見るとLukasという人曰くやはりThymeleafの変数の値を変更することはできないそうですが・・。 (Lukasさんはこちらのブログを書いている方? http://lukasgrygar.com/thymeleaf/thymeleaf-tips-and-tricks/) 発言のソースが見たいところですが見つかりませんでした。
maryumo

2017/01/12 13:00

>koronatailさん おぉ、ありがとうございます。 当たり前のように「できないよ」って書いてますね・・(^^; 別の方法も検討しつつ、参考にさせてもらいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問