DTOのライフサイクルとプロパティの保存

DTOのライフサイクルをrequestにする場合、プロパティはフォーム部品にバインディングして保持することになりますが、List型のプロパティを保存できないのが悩ましいです。

public class EditEmployeeDto implements Serializable {
    private String name;
    private Long sectionId;
    private List<Section> selectableSections; // 部門の選択肢

    // 以下getter, setter
}

...
名前: <input type="text" m:value="#{editEmployeeDto.name}" m:required="true"/>
部門: <select m:value="#{editEmployeeDto.sectionId}"
        m:items="#{editEmployeeDto.selectableSections}"
        m:itemLabel="name" m:itemValue="id"/>
...

例えばこのようなDTOとHTMLの組み合わせがあり、DTOがrequest属性だとします。「名前」を未入力にしてsubmitすると、バリデーションエラーが発生して同じ画面に戻ってきますが、このとき「部門」の選択肢が消えてしまいます。

1画面で完結する操作に対してはrequest属性のDTOを割り当てるのが基本だと思いますが、このようにList型プロパティを含むDTOの場合、バリデーションまで考慮するとsessionを使わざるを得なくなります。Listをhiddenフィールドにシリアライズできれば便利だなと思います。