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>
@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の動的配列の値を取得する」でした。