Spring MVC - выпадающий выбор объекта - без первичного идентификатора

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

Мой вопрос: существует ли какая-либо стандартная практика для этого? Или я должен просто придумать свой собственный способ сделать это? Я бы предпочел не изобретать колеса заново, если возможно, и это настолько обычное дело, что простое управление им может быть не лучшим подходом.

16
задан BalusC 15 November 2011 в 00:34
поделиться