Существует довольно распространенный случай использования, когда есть список объектов Java, из которых можно сделать выбор в веб-форме - обычно вы должны использовать первичный ключ объекта в качестве значения, чтобы контроллер мог либо делать поиск или просто привязать ключ к тому, какой объект создан/обновлен.
Моя проблема заключается в том, что список на выбор не является постоянным, ключевым объектам, они являются бизнес-моделями из службы, которые не имеют разумного способа получить их на основе содержащихся данных. Ниже приведен какой-то код psuedo, где список Foo указан на странице, и мы можем легко связаться с контроллером onSubmit имя Foo, но что, если есть другие поля Foo, которые необходимо отправить?
контроллер:
referenceData() {
...
List foos = fooService.getFoosForBar( bar )
return { 'foos', foos }
}
JSP:
<form>
...
<spring:bind path="formData.foo">
<select name="<c:out value="${status.expression}" />">
<c:forEach items="${foos}" var="foo">
<option value="<c:out value="${foo.name}"/>">
<c:out value="${foo.name}"/>
</option>
</c:forEach>
</select>
</spring:bind>
...
</form>
Некоторые примеры решений заключались бы в использовании скрытых полей для отправки других свойств Foo и синхронизации их с изменением выбора, но я предпочитаю не использовать JavaScript в такой ситуации, где он, вероятно, добавит путаницу. Конечно, есть и другие способы сделать это.
Мой вопрос: существует ли какая-либо стандартная практика для этого? Или я должен просто придумать свой собственный способ сделать это? Я бы предпочел не изобретать колеса, если это возможно, и это настолько очевидно, что просто крыло может быть не лучшим.