0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

タイムリーフのお話

Posted at

Springを学んで2ヶ月目の自分が学習したことを定着させたいと思い、自分の言葉でまとめた。

タイムリーフのお話

value属性

フロントからデータを送る場合は、th:value = usernameのようにinputタグの中のvalue属性の中にthをつけなければいけないとバックエンド側に送られないと思っていた。しかし、プログラミング系のバイトをしているとフロントのフレームワークを連携してその記法でvalueに設定された値でも送れることを知った。そこでなぜなのかと色々調べていると、サーバー側に送られるのはどういう形でもいいが、サーバー側の値をフロントで使うためにはタイムリーフの記法を使わなければいけないらしい。また、サーバー側で@RequestParam("username") String usernameのようにusernameの中にフロント側で入力された値を紐付けたい場合は、th:name = usernameをつけると紐づく。これも、th:value usernameとしなくてもサーバー側に値が送られる要因だと考えられる。

th:objectについて

サーバー側で@ModelAttribute("object") Test testとした時に、フロント側でth:object = ${object}とするとtestに定義されているフィールド名が参照可能になり、表示することができる

th:valueとth:fieldの違い

私は、最初の「value属性」という章でも記述した通り、th:valueのみが値をサーバー側に送っているものだと思っていた。しかし、実際はinputタグのname属性に割り当てられた名前がサーバー側の@RequestParam("name")と紐づけられnameという名前でvalue属性の値が格納されるというものだった。フロントに表示される仕組みはデータを送る逆。そのため、th:valueth:nameがないとサーバーとバインドができない。しかし、th:fieldは、th:nameth:valueの二つの機能を持つ。

<input type="text" th:name="name" th:value="${user.name}"/>

th:value使うと上記のコードのように書けるものが、th:fieldを使うと、

<form th:object="${user}">
    <input type="text" th:field="*{name}" />
</form>

このように書ける。
th:fieldth:objectを伴って使うため、使い分けとしては、単純な値を処理するかどうかで決まる。th:fieldth:objectを使う理由は、どのオブジェクトを参照すればいいかが不明なため。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?