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