Я пытаюсь, чтобы поле формы содержало один или несколько элементов, которые определены в другом источнике данных. Элементы имеют числовой идентификатор и удобочитаемое имя. Все работает хорошо, пока я не попытаюсь сохранить; в этом случае я всегда получаю сообщение об ошибке «Неправильная опция».
Форма, которую я редактирую, основана на источнике данных Campaigns, который может быть связан с нулем или более Транками.
Транки источника данных определены как:
DataSourceField fId = new DataSourceField(
"trunkId", FieldType.INTEGER, "Id");
fId.setPrimaryKey(Boolean.TRUE);
fId.setHidden(Boolean.TRUE);
fId.setCanEdit(Boolean.FALSE);
DataSourceField fName = new DataSourceField(
"trunkName", FieldType.TEXT, "Name");
fName.setRequired(Boolean.TRUE);
Кампании источника данных имеют поле "ствол", определенное как:
DataSourceField fTrunk = new DataSourceField(
"trunk",
FieldType.INTENUM,
"Trunk"
);
fTrunk.setMultiple(Boolean.TRUE);
fTrunk.setForeignKey("CfgTrunkDS.trunkId");
А вот определение формы, позволяющее выбрать несколько значений:
final DynamicForm form = new DynamicForm();
form.setIsGroup(true);
form.setGroupTitle("Update Campaign");
form.setNumCols(4);
form.setDataSource(dsCampaign);
form.setUseAllDataSourceFields(Boolean.TRUE);
final SelectItem selectItemMultipleGrid = new SelectItem("trunk");
selectItemMultipleGrid.setTitle("Trunk to use");
selectItemMultipleGrid.setMultiple(true);
selectItemMultipleGrid.setMultipleAppearance(MultipleAppearance.PICKLIST);
selectItemMultipleGrid.setOptionDataSource(CfgTrunkDS.getInstance());
selectItemMultipleGrid.setValueField("trunkId");
selectItemMultipleGrid.setDisplayField("trunkName");
form.setFields(selectItemMultipleGrid);
Я также правильно вижу множественные значения, и если я смотрю на поля "trunk", я вижу строку типа "12, 16", когда выбираю элементы с идентификаторами 12 и 16. Но все равно не проходит проверку. Я также заметил, что если я прокомментирую OptionDataSource в определении формы, он будет работать так же хорошо.
Что я сделал не так?