我试图让一个表单字段包含一个或多个在不同数据源中定义的元素。元素有一个数字 id 和一个人类可读的名称。在我尝试保存之前,一切都很好;在这种情况下,我总是收到“不是有效选项”错误。
我正在编辑的表单基于 Campaigns 数据源,该数据源可能链接到零个或多个 Trunk。
数据源中继定义为:
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);
我也正确地看到了多个值,如果我查看“主干”字段,当我选择 id 为 12 和 16 的元素时,我会看到一个类似“12、16”的字符串。但仍然没有通过验证。我还注意到,如果我在表单定义中注释 OptionDataSource,它也可以正常工作。
我做错了什么?