Thymeleafを使用したSpring要求パラメーター

1. 前書き

*記事link:/thymeleaf-in-spring-mvc[SpringでのThymeleafの使用の概要]では、ユーザー入力をオブジェクトにバインドする方法を説明しました。*
Thymeleafテンプレートで_th:object_と_th:field_を使用し、コントローラーで_ @ ModelAttribute_を使用して、データをJavaオブジェクトにバインドしました。 *この記事では、Thymeleafと組み合わせてSpringアノテーション_ @ RequestParam_を使用する方法を見ていきます。*

2. フォームのパラメーター

最初に、4つのオプションの要求パラメーターを受け入れる単純なコントローラーを作成しましょう。
@Controller
public class MainController {
    @RequestMapping("/")
    public String index(
        @RequestParam(value = "participant", required = false) String participant,
        @RequestParam(value = "country", required = false) String country,
        @RequestParam(value = "action", required = false) String action,
        @RequestParam(value = "id", required = false) Integer id,
        Model model
    ) {
        model.addAttribute("id", id);
        List<Integer> userIds = asList(1,2,3,4);
        model.addAttribute("userIds", userIds);
        return "index";
    }
}
Thymeleafテンプレートの名前は_index.html_です。 *次の3つのセクションでは、ユーザーがコントローラーにデータを渡すために異なるHTMLフォーム要素を使用します。*

2.1. 入力要素

まず、テキスト入力フィールドとフォームを送信するボタンを備えたシンプルなフォームを作成しましょう。
<form th:action="@{/}">
<input type="text" th:name="participant"/>
<input type="submit"/>
</form>
属性_th:name =âcipientâ€_は、入力フィールドの値をコントローラーのパラメーター_participant_にバインドします。 *これを機能させるには、パラメータに_ @ RequestParam(value =“participantâ€)_。*の注釈を付ける必要があります。

2.2. 要素を選択

同様に、HTMLのselect要素の場合:
<form th:action="@{/}">
    <input type="text" th:name="participant"/>
    <select th:name="country">
        <option value="de">Germany</option>
        <option value="nl">Netherlands</option>
        <option value="pl">Poland</option>
        <option value="lv">Latvia</option>
    </select>
</form>
選択したオプションの値は、_ @ RequestParam(value =“countryâ€)_アノテーションが付けられたパラメータ_country_にバインドされます。

2.3. ボタン要素

_th:name_を使用できるもう1つの要素は、ボタン要素です。
<form th:action="@{/}">
    <button type="submit" th:name="action" th:value="in">check-in</button>
    <button type="submit" th:name="action" th:value="out">check-out</button>
</form>
フォームを送信するために最初のボタンを押すか2番目のボタンを押すかによって、パラメーター_action_の値は_check-in_または_check-out_のいずれかになります。

3. ハイパーリンクのパラメーター

*リクエストパラメータをコントローラに渡す別の方法は、ハイパーリンクを使用することです*
<a th:href="@{/index}">
そして、括弧内にパラメーターを追加できます。
<a th:href="@{/index(param1='value1',param2='value2')}">
Thymeleafは、上記を次のように評価します。
<a href="/index?param1=value1¶m2=value2">
  • Thymeleaf式を使用してハイパーリンクを生成することは、変数に基づいてパラメーター値を割り当てる場合に特に便利です。*たとえば、ユーザーIDごとにハイパーリンクを生成しましょう。

<th:block th:each="userId: ${userIds}">
    <a th:href="@{/(id=${userId})}"> User [[${userId}]]</a> <br/>
</th:block>
ユーザーIDのリストをプロパティとしてテンプレートに渡すことができます。
List<Integer> userIds = asList(1,2,3);
model.addAttribute("userIds", userIds);
そして、結果のHTMLは次のようになります。
<a th:href="/?id=1"> User 1</a> <br/>
<a th:href="/?id=2"> User 2</a> <br/>
<a th:href="/?id=3"> User 3</a> <br/>
ハイパーリンクのパラメーター_id_は、_ @ RequestParam(value =“idâ)で注釈されたパラメーター_id_にバインドされています。

4. 概要

この短い記事では、Thymeleafと組み合わせてSpring要求パラメーターを使用する方法を説明しました。
最初に、要求パラメーターを受け入れる単純なコントローラーを作成しました。 次に、Thymeleafを使用して、コントローラーを呼び出すことができるHTMLページを生成する方法を検討しました。
この記事のすべての例の完全なソースコードhttps://github.com/eugenp/tutorials/tree/master/spring-thymeleaf-2[GitHubにあります。]