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

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

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

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

Q&A

1回答

3394閲覧

Thymeleafの${}と*{}を併用はできない?

yoshihiro_yy

総合スコア27

Thymeleaf

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

0グッド

0クリップ

投稿2018/04/10 12:41

Thymeleafにの記述の仕方で、以下の二通りは別々に使う分には問題なく利用出来ております。

html

1<!-- $で直接参照 --> 2<th:block th:text="${form.name}"/> 3<th:block th:if="${form.flg}">trueです</th:block> 4 5<!-- *でth:objectで指定したオブジェクトの中身を指定 --> 6<th:block th:object="${from}" 7 <th:block th:text="*{name}"/> 8 <th:block th:if="*{flg}">trueです</th:block> 9</th:block>

ここでこの二つの合わせ技は出来ないのでしょうか?
例えば以下のような状態で、XXXXXXXXの部分に両方のフラグがtrueということをしたいのですが

html

1model.form.flg1 (modelの中のformオブジェクトの中のflg1というboolean) 2model.flg2 (modelに"flg2"という名前で設定してるboolean) 3 4<th:block th:object="${from}"> 5 <th:block th:if="XXXXXXXX">両方trueです</th:block> 6</th:block>

$と*併用して一発でやりたいと思ったのですがうまく記述の仕方が分からず、

html

1<th:block th:object="${from}"> 2 <th:block th:if="*{flg1}"> 3 <th:block th:if="${flg2}"> 4 両方trueです</th:block> 5 </th:block> 6 </th:block> 7</th:block> 8と無駄に階層が深くなってしまっています。 9 10もしくは 11<th:block th:object="${from}"> 12 <th:block th:if="${from.flg1 && flg2}"> 13 両方trueです 14 </th:block> 15</th:block> 16と、せっかく親のth:blockでth:objectをしているのに、どちらも直接参照する記述で気持ち悪い記述になっています。

これを

html

1<th:block th:object="${from}"> 2 <th:block th:if="*{flg1 && flg2}">両方trueです</th:block> 3</th:block>

といったような簡潔な記述の方法はないのでしょうか?

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

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

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

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

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

guest

回答1

0

動作確認はしてないけど記述方式だと

<div th:if="${flag1} || *{flag2}">

でもいけそうなんだがどうなんだろう

追記

内部テキストがあるかないかでJSで削除してねとなりそうだけど

https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf_ja.html#デフォルト式-エルビス演算子

これがあるみたいね

投稿2018/04/10 14:17

編集2018/04/14 03:58
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yoshihiro_yy

2018/04/11 11:01

ご回答ありがとうございます。 私もまだ試せていないのですが、てっきり{}の中で全て完結させないといけないと思っていました。 近い内に試してみようと思います。
yoshihiro_yy

2018/04/14 03:33

試してみましたが org.attoparser.ParseException が発生してダメでした、、、 ""の中に{}が複数あるのはダメそうでした。 Thymeleaf、かゆい所には手が届かないところが多いので、これもやはり諦めるしかないでしょうか。。。
nakazawaken1

2018/04/23 10:08

<th:block th:if="*{flg1} and ${flg2}">両方trueです</th:block>でいけるようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問