kikki's tech note

技術ブログです。UnityやSpine、MS、Javaなど技術色々について解説しています。

Spring BootでFormの動的配列の値を取得する

本章では、Spring Bootで動的に増減する入力欄から、入力値を受け取る方法について共有します。

はじめに

入力する欄がすべて決まっている場合は、Controllerに用意したModelに値をバインドさせることは容易です。一方で、Listといった動的配列の場合、HTML文中の記述、Modelの作りに注意する必要があります。そこで今回は、注意点について確認します。

ソースコード

早速ですが、以下HTMLでのソースコードになります。重要な点は、ControllerでPOSTされた値がModelにバインドするよう、HTMLタグのNAME属性をModelの名前と一致させることです。

<table>
	<thead>
		<tr>
			<th></th>
			<th>ペン</th>
		</tr>
	</thead>
	<tbody>
		<!-- GET時に、listはControllerからバインドさせた初期一覧が入る -->
		<tr th:each="item, stat : ${list}">
			<!-- |shippingList[${stat.index}]~~でPOST時に、ControllerのModelにバインドさせる -->
			<!-- name属性に設定された名前が、Modelの名前と一致するように調整する -->
			<!-- value属性は、ControllerでGET時にmodelとバインドさせた場合に表示される -->
			<td><input type="text" th:name="|shippingList[${stat.index}].month|"  th:value="${item.month}" /></td>
			<td><input type="text" th:name="|shippingList[${stat.index}].pen|" th:value="${item.pen}"/></td>
		</tr>
	</tbody>
</table>

以下は、Javaソースコードになります。

@SuppressWarnings("serial")
@Data
public class TotalShippingModel implements Serializable {

    /**
     * 出荷額
     */
    @NotNull
    @DecimalMin("10000")
    @DecimalMax("9999999999")
    @Digits(integer = 10, fraction = 0)
    private BigDecimal amount;

    /**
     * ペンの出荷数一覧
     */
    private List<MonthlyShippingModel> shippingList;
}
@SuppressWarnings("serial")
@Data
public class MonthlyShippingModel implements Serializable {

    /**
     *
     */
    @NotNull
    @Min(1)
    @Max(12)
    private int month;

    /**
     * ペンの出荷数
     */
    @NotNull
    @Min(1)
    private int pen;
}

筆休め

本章では、Spring Bootでリスト形式やテーブル形式となっている入力欄の作り方について、簡単に整理しました。タスクといった数が決まっていない、システムで利用できるかと思います。

以上、「Spring BootでFormの動的配列の値を取得する」でした。


※無断転載禁止 Copyright (C) kikkisnrdec All Rights Reserved.