Domanda

Sto usando Web flusso 2.0.7 con Spring MVC e Hibernate.

Il mio problema è sui convertitori personalizzati per i miei tipi personalizzati e connessione al database da dentro il mio convertitore.

Diciamo che ho un tipo di persona e persona ha un campo di mio tipo personalizzato Titolo , e tutti i Titoli sono già nel mio database. Ora ho un form HTML, in cui un utente può compilare un persona istanza, compresa la selezione del Titolo in una casella di selezione a discesa.

Nella definizione di flusso ricevo tutti i Titoli dal database e si sono mostrati nella casella a discesa con un convertitore personalizzato, la conversione di Titolo per Stringa e poi di nuovo a Titolo .

La mia domanda riguarda il processo di conversione di ritorno da Stringa (che è l'ID del database, che ho impostato come valore sull'elemento) per il corretto Titolo oggetto dal il mio database. In sostanza:? Come fare

Finora, sono stato in grado di ottenere un titleManager iniettato nel mio convertitore per ottenere l'accesso al database. Questo scenario è stato commentato nel Primavera Forum flusso Web . Un'altra soluzione potrebbe essere quella di memorizzare nella cache Titoli prima del rendering della vista e in qualche modo ottenere l'in-memory Titolo dopo che il modulo è stato pubblicato.

Vorrei davvero apprezzare, se qualcuno potesse illuminare, come gestire questo tipo di associazione dati. Non sono riuscito a farlo funzionare così lontano e così, io ottenere l'uso minimo fuori dai webflows altrimenti impressionante.

I già postato un thread sul Web consiglio flusso , ma ancora manca un best-pratice, che non sono in grado di trovare da solo.

Grazie mille!

Wolfram

È stato utile?

Soluzione

Io lo uso per fare questo. Fondamentalmente ho caricare l'elenco dei titoli e lo misi nel mio modello modulo. Nel modello forma Ho anche una variabile currentTitleId o selectedTitleId per memorizzare il valore della voce selezionata. Questo nome di campo si trova nel "percorso" della casella combinata primavera e l'titleList si trova nelle "voci". Quindi il valore che si desidera associare è ambientato nel "itemValue" e il testo da visualizzare per quel valore in "itemLabel". Questo è tutto.

Nel mio modello forma:

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

List titleList = getTitlesFromMyDatabaseHereOrSomewhereElse();

Nel mio jsp:

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

Presumo che la classe titolo sarà qualcosa di simile a questo:

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

È inoltre possibile personalizzare si COMBOBOX un po 'più simile a questo:

    <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>

Altri suggerimenti

Io non sono così sicuro di Spring Web Flow, ma con la normale Spring MVC è sufficiente registrare un nuovo PropertyEditor e quindi questa roba funziona automaticamente

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

http: // static .springframework.org / primavera / docs / 2.5.x / riferimento / mvc.html # MVC-ann-webdatabinder

Quindi, vorrei creare un nuovo PropertyEditor che ottiene un servizio o dao che sarebbe responsabile per ottenere i dati dal database, e all'interno del PropertyEditor si dovrebbe convertire il id al vostro tipo di chiave ed ottenere il valore dal database e ritorno esso. Solo che non ho un esempio scorretto con me, ma spero che si ottiene il succo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top