Frage

I Web Flow 2.0.7 mit Spring MVC bin mit und Hibernate.

Mein Problem ist, über benutzerdefinierte Konverter für meine benutzerdefinierten Typen und Datenbankverbindung aus meinem Konverter.

Lassen Sie uns sagen, ich habe eine Art Person und Person hat ein Feld meiner benutzerdefinierten Typ Titel und alle Titel sind bereits in meiner Datenbank. Jetzt habe ich ein HTML-Formular, in dem ein Benutzer eine Person bevölkern kann Instanz, einschließlich der Auswahl der Titel in einem ausgewählten Dropdown-Feld.

In der Ablaufdefinition erhalte ich alle Titel aus der Datenbank, und sie werden in der Dropdown-Liste mit einem benutzerdefinierten Konverter gezeigt, Umwandlung Titel String und später zurück in Titel .

Meine Frage ist über den Prozess von der Umwandlung zurück String (die die Datenbank-ID, die ich als Wert für das Element eingestellten) auf das richtige Titel Objekt aus meine Datenbank. Grundsätzlich gilt: Wie es tun

Bisher war ich nicht in der Lage titleManager in meinen Konverter injizierte zu bekommen Zugriff auf die Datenbank zu erhalten. Dieses Szenario wurde kommentiert in dem Spring Web Flow Foren . Eine andere Lösung könnte sein, die Titel zwischenzuspeichern vor der Ansicht, Rendering und irgendwie bekommen die In-Memory Titel , nachdem das Formular aufgerufen worden.

Ich würde es wirklich schätzen, wenn mich jemand aufklären könnte, wie diese Art von Daten zu handhaben zu binden. Ich war nicht in der Lage, es zu bekommen arbeiten, so weit und so bekomme ich eine minimale Verwendung aus dem sonst ehrfürchtigen webflows.

ich bereits geschrieben ein Thread auf dem Web Flow Vorstand , aber immer noch fehlt eine best-Practice, die ich nicht in der Lage bin von mir selbst zu finden.

Vielen Dank!

Wolfram

War es hilfreich?

Lösung

ich, dies zu tun. Im Grunde lade ich die Liste der Titel und steckte es in die Form Modell. In Form Modell habe ich auch ein currentTitleId oder selectedTitleId Variable den Wert des ausgewählten Elements zu speichern. Dieser Feldname wird in dem „Pfad“ der Feder Combobox und der titlelist wird in dem „Artikel“ gesetzt. Dann wird der Wert, den Sie binden mögen gesetzt in dem „ItemValue“ und der Text wird in „ITEMLABEL“ für diesen Wert dargestellt. Das ist es.

In meiner Form Modell:

private int currentTitleId;
public long getCurrentTitleId() { return this.currentTitleId; }
public void setCurrentTitleId(long currentTitleId) { this.currentTitleId = currentTitleId; }

List titleList = getTitlesFromMyDatabaseHereOrSomewhereElse();

In meiner jsp:

<form:label path="currentTitleId">Title</form:label>
<form:select path="currentTitleId" items="${formModel.titleList}" itemLabel="titleDescription" itemValue="titleId" />

Ich gehe davon aus, dass Ihre Titel-Klasse in etwa so sein wird:

class Title {
    public long getTitleId() { return this.titleId; }
    public long getTitleDescription() { return this.titleDescription; }
}

Sie können auch anpassen, Sie ein wenig mehr wie diese COMBOBOX:

    <form:select path="currentPhoneNumberId">
    <form:option value="">-</form:option>
    <c:forEach items="${formModel.phoneList}" var="phone">
        <form:option value="${phone.phoneNumberId}">${phone.phoneNumberId} - ${phone.description}</form:option>
    </c:forEach>
</form:select>

Andere Tipps

Ich bin mir nicht so sicher über Spring Web Flow, aber mit dem normalen Spring MVC ist es ausreichend, ein neues Property registrieren und dann das Zeug funktioniert automatisch

http : //static.springframework.org/spring/docs/2.5.x/reference/validation.html#beans-beans-conversion-customeditor-registration

http: // static .springframework.org / Frühjahr / docs / 2.5.x / reference / mvc.html # mvc-ann-webdatabinder

So würde ich ein neues Property schaffen, die eine Dienstleistung oder ein dao bekommt, die für das Erhalten der Daten aus der Datenbank verantwortlich ist, und innerhalb des Property würden Sie die ID zu Ihrem Schlüsseltyp umwandeln und den Wert aus der Datenbank und zurück bekommen es. Ich habe einfach nicht ein Beispiel direkt mit mir, aber ich hoffe, dass Sie das Wesentliche bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top