16 Stimmen

Spring MVC - Dropdown-Objektauswahl - Kein primärer Bezeichner

Ein recht häufiger Anwendungsfall ist eine Liste von Java-Objekten, aus der in einem Webformular eine Auswahl getroffen werden kann. Normalerweise würde man den Primärschlüssel des Objekts als Wert verwenden, so dass der Controller entweder eine Suche durchführen oder den Schlüssel einfach an das Objekt binden kann, das erstellt/aktualisiert wird.

Mein Problem ist, dass die Liste, aus der ich wählen kann, keine persistenten, verschlüsselten Objekte sind, sondern Geschäftsmodelle eines Dienstes, bei denen es keine vernünftige Möglichkeit gibt, sie auf der Grundlage der enthaltenen Daten abzurufen. Unten ist einige psuedo Code, wo eine Liste von Foo's auf der Seite gegeben sind, und wir können leicht an den Controller onSubmit den Namen von Foo kommunizieren, aber was, wenn es andere Felder von Foo, die übermittelt werden müssen?

Controller:

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>

Einige Beispiellösungen wären, versteckte Felder zu verwenden, um die anderen Eigenschaften von Foo zu übermitteln und sie synchron zu halten, wenn die Auswahl geändert wird, aber ich ziehe es vor, kein JavaScript in einer Situation wie dieser zu verwenden, wo es wahrscheinlich zu Verwirrung führen wird. Es gibt sicherlich auch andere Möglichkeiten, dies zu erreichen.

Meine Frage ist, ob es eine Standardmethode gibt, um dies zu erreichen? Oder sollte ich mir einfach einen eigenen Weg ausdenken, dies zu tun? Ich würde lieber nicht neu erfinden Räder, wenn möglich, und dies ist so scheinbar gemeinsame, dass nur Flügeln es nicht der beste Ansatz sein kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X