Довольно распространенный вариант использования имеет место, когда есть список объектов Java, из которых можно выбрать в веб-форме - обычно в качестве значения используется первичный ключ объекта, чтобы контроллер мог либо выполнять поиск, либо просто связывать ключ с любым созданным / обновленным объектом.
Моя проблема в что в списке на выбор нет постоянных объектов с ключами, они представляют собой бизнес-модели службы, у которых нет разумного способа получить их на основе содержащихся данных. Ниже приведен некоторый псевдо-код, в котором на странице передается список 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 в такой ситуации, когда он, вероятно, добавит спутанность сознания. Конечно, есть и другие способы добиться этого.
Мой вопрос: существует ли какая-либо стандартная практика для этого? Или я должен просто придумать свой собственный способ сделать это? Я бы предпочел не изобретать колеса заново, если возможно, и это настолько обычное дело, что простое управление им может быть не лучшим подходом.