Используя Play 2.3.7 (Java), у меня есть следующий сценарий.
У меня есть класс CSVData
, который содержит список типа CSVField
. Вот атрибуты для этих классов:
public class CSVData{
private String name;
private String description;
private String dataFilePath;
private List<CSVField> fields;
private Double latitude;
private Double longitude;
// rest of class... }
и
public class CSVField {
private String name;
private String type;
...}
Сложность создания формы для ввода CSVData
заключается в том, что у меня есть вложенный атрибут List<CSVField>
, а CSVField
— это настраиваемый тип, содержащий две строки. Мне нужно, чтобы форма была динамической, чтобы она могла принимать произвольное количество CSVField
s (не менее 1). Согласно документации по форме Java, мне кажется, что я должен зарегистрировать собственный DataBinder для CSVField, однако я не могу найти примеры, которые делают это с несколькими входными строками. Этот пример подобен, но только связывает одно поле.
Вот видео о том, какой тип пользовательского ввода мне нужен. Я сделал свое представление, используя этот пример кода для добавления динамических полей. Комбинация текстового поля (имя) и выбора элемента раскрывающегося списка (тип) — это то, что мне нужно для привязки к CSVField
, а затем добавить к List<CSVField> fields
в объекте CSVData
. Как это сделать с помощью Play Framework?
EDIT: в моем контроллере я пробовал это
Form<CSVData> formData = Form.form(CSVData.class).bindFromRequest();
И в представлении я пробую это
@helper.repeat(csvForm("fields"), min = 1) { csvField =>
@multiDataField(csvField,
label = "Column Name and Type",
gsnTypes,
help = "Enter the column names and respective types for the data items in the file")
}
Где multiDataField
— это этот шаблон. Но он неправильно связывает динамические поля и выдает недопустимую ошибку проверки fields
. Я думаю, моя проблема в том, что я не знаю, какие атрибуты name
использовать в моем шаблоне multiDataField
. Любой совет?