{"record":{"id":"1104a2f4089a1c7f","repo":"theonedev/onedev","slug":"not-eligible-for-multi-value-1104a2","errorCode":null,"errorMessage":"Not eligible for multi-value","messagePattern":"Not eligible for multi-value","errorType":"validation","errorClass":"ValidationException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/buildspecmodel/inputspec/IterationChoiceInput.java","lineNumber":45,"sourceCode":"\t\tbuffer.append(\"    @IterationChoice\\n\");\n\t\t\n\t\tif (inputSpec.isAllowMultiple())\n\t\t\tinputSpec.appendMethods(buffer, index, \"List<String>\", null, null);\n\t\telse \n\t\t\tinputSpec.appendMethods(buffer, index, \"String\", null, null);\n\t\t\n\t\treturn buffer.toString();\n\t}\n\n\tpublic static Object convertToObject(InputSpec inputSpec, List<String> strings) {\n\t\tif (inputSpec.isAllowMultiple()) \n\t\t\treturn strings;\n\t\telse if (strings.size() == 0) \n\t\t\treturn null;\n\t\telse if (strings.size() == 1)\n\t\t\treturn strings.iterator().next();\n\t\telse \n\t\t\tthrow new ValidationException(\"Not eligible for multi-value\");\n\t}\n\n\t@SuppressWarnings(\"unchecked\")\n\tpublic static List<String> convertToStrings(InputSpec inputSpec, Object value) {\n\t\tList<String> strings = new ArrayList<>();\n\t\tif (inputSpec.isAllowMultiple()) {\n\t\t\tif (inputSpec.checkListElements(value, String.class))\n\t\t\t\tstrings.addAll((List<String>) value);\n\t\t\tCollections.sort(strings);\n\t\t} else if (value instanceof String) {\n\t\t\tstrings.add((String) value);\n\t\t} \n\t\treturn strings;\n\t}\n\n\tpublic static int getOrdinal(String fieldValue) {\n\t\tint ordinal = -1;\n\t\tProject project = Project.get();","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/buildspecmodel/inputspec/IterationChoiceInput.java#L27-L63","documentation":"IterationChoiceInput converts input strings into iteration (sprint) references. After handling allowMultiple and empty cases, a single value is returned, but a set with more than one element falls through to throw ValidationException('Not eligible for multi-value').","triggerScenarios":"convertToObject called with a strings collection of size >1 on an iteration choice input that is not in allowMultiple mode.","commonSituations":"Selecting multiple iterations in a form where the input only allows one; scripted submission of an array of iteration names; input spec changed from allowMultiple: true to false while old multi-values persist.","solutions":["Select/submit exactly one iteration for this input.","Set allowMultiple: true on the iteration choice input if multiple selections are intended.","Clear leftover multi-value defaults in the job spec after switching allowMultiple off.","Fix the automation script to pass a single iteration value."],"exampleFix":"// before\nvalues: [\"Sprint 1\", \"Sprint 2\"]\n// after (if multi intended)\nallowMultiple: true\nvalues: [\"Sprint 1\", \"Sprint 2\"]","handlingStrategy":"validation","validationCode":"// Ensure value count matches allowMultiple setting\nif (!inputSpec.isAllowMultiple() && values != null && values.size() > 1) {\n  throw new Error(\"Iteration input accepts only one value unless allowMultiple is true\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    Object iteration = iterationChoiceInput.convertToObject(strings);\n} catch (ValidationException e) {\n    if (e.getMessage().contains(\"multi-value\")) {\n        // either reduce to one value or set allowMultiple: true\n    }\n}","preventionTips":["Set allowMultiple: true explicitly when multiple iterations are intended.","Clean stale multi-value defaults after toggling allowMultiple.","Keep form controls and input spec cardinality in sync."],"tags":["validation","input","multi-value","iteration"],"backgroundTag":"invalid-argument-value","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}