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

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

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

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

Spring Boot

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

Q&A

解決済

2回答

6377閲覧

thymeleaf th:with="@{任意のAPI...}"でAPIの取得結果の数値を表示したい

sllmejacob

総合スコア72

Thymeleaf

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

Spring Boot

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

0グッド

0クリップ

投稿2017/05/18 02:43

###前提・実現したいこと
thymeleafのth:withの宛先をURLにしてAPIが返す数値を取得したい。
(もし仕様上難しいようであれば、代替方法を教えていただきたく思っています。)

###該当のソースコード
具体的なthymeleaf実装は以下のようにしています。

thymeleaf

1th:with="count=@{/api1/count/error}" 2th:text="${count}"

数値を返すAPIも関係があるかもしれませんので記載します。
レスポンスの指定方法に誤りがあるのかもしれない?と懸念しているのですが…。
現在はダミーで99を返すようになっています。

spring

1@RestController 2@RequestMapping("api1/count") 3public class CountController { 4(中略) 5 @GetMapping(value="error") 6 ResponseEntity<Integer> count(Model model) { 7 try { 8 HttpHeaders headers = new HttpHeaders(); 9 headers.add("contet-type", MimeTypeUtils.TEXT_PLAIN_VALUE + ";utf-8"); 10 headers.add("Accept-Charset", "utf-8"); 11 Integer count = 99; 12 ResponseEntity<Integer> response = new ResponseEntity<Integer>(count, headers, HttpStatus.OK); 13 return response; 14 } catch (Exception e) { 15 (中略) 16 } 17 return new ResponseEntity<Integer>(HttpStatus.NOT_FOUND); 18 } 19}

画面には、withで指定したURL箇所がそのまま表示されてしまいます。
表示:/api1/count/error
理想:99

###試したこと
th:text="@{/api1/count/error}"も試しましたが結果は同様でした。

###補足情報(言語/FW/ツール等のバージョンなど)
spring-boot1.4.6
thymeleaf2.1.5

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

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

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

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

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

guest

回答2

0

本件、thymeleafとspring-beanの組み合わせで解決しました。
結果はth:textで出力できます。またth:withでも問題なく動作するようです。
thymeleaf-docsの5. Spring beansを参考に@Configurationしたクラスを作成してそちらでInterfaceを返すように作成。

java

1@Configuration 2public class CountConfig { 3 4 @Autowired 5 private CountService countService; 6 7 @Bean(name="errorCount") 8 public Counter errorCounter() { 9 return () -> countService.countError(); 10 } 11 12 public interface Counter { 13 public Integer count(); 14 } 15 16}

th:text版

thymeleaf

1<span class="badge" th:text="${@errorCount.count()}"></span>

th:with版 th:withの定義位置は任意で。

thymeleaf

1th:with="count=${@errorCount.count()}" 2<span class="badge" th:text="${count}"></span>

投稿2017/05/22 03:28

編集2017/05/22 03:33
sllmejacob

総合スコア72

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

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

0

ベストアンサー

th:withの中からはHTTPリクエストは飛ばせません。

もしth:withの中で宣言した変数にHTTPリクエストした結果を格納したい場合は、このThymeleafを出力したController内にてHTTPリクエストを投げ、そのレスポンス結果も出力する方法が良いでしょう。

投稿2017/05/21 06:44

A-pZ

総合スコア12011

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

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

sllmejacob

2017/05/21 08:51

ご回答ありがとうございます。やはりそうなりますか…。 Bootstrap3のbadgeで件数通知を行いたかったので、コントローラで処理する方式は避けたかったのですが、ちょっと通知方式から検討しなおしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問