Question

J'utilise Web avec flux 2.0.7 Spring MVC et Hibernate.

Mon problème est sur les convertisseurs personnalisés pour mes types personnalisés et la connexion de base de données à partir de mon convertisseur.

Disons que j'ai un type personne et personne a un champ de mon type personnalisé Titre , et tous les Titres sont déjà dans ma base de données. Maintenant, j'ai un formulaire HTML, dans lequel un utilisateur peut remplir un personne par exemple, y compris la sélection du Titre dans une liste déroulante, sélectionnez.

Dans la définition de flux que je reçois tous les Titres à partir de la base de données et ils sont présentés dans la liste déroulante en utilisant un convertisseur personnalisé, la conversion Titre Chaîne et plus tard revenir à Titre .

Ma question concerne le processus de conversion de retour de Chaîne (ce qui correspond à l'ID de base de données, que j'établir en tant que valeur de l'élément) à la correcte Titre objet de ma base de données. En gros: Comment faire

Jusqu'à présent, je ne pouvais pas obtenir un titleManager injecté dans mon convertisseur pour accéder à la base de données. Ce scénario a été commenté dans la Spring Forum Web Flow . Une autre solution pourrait être de mettre en cache les Titres avant de rendre la vue et obtenir en quelque sorte la mémoire dans Titre Une fois le formulaire ci-dessous.

Je voudrais vraiment l'apprécier, si quelqu'un pouvait me éclairer, comment gérer ce genre de liaison de données. Je ne pouvais pas le faire fonctionner à ce jour et donc, je reçois une utilisation minimale de la webflows autrement impressionnant.

Je l'ai déjà posté un sujet sur le forum Web Flow , mais toujours manque un best-pratice, que je suis incapable de trouver par moi-même.

Merci beaucoup!

Wolfram

Était-ce utile?

La solution

Je l'utilise pour ce faire. Fondamentalement, je charge la liste des titres et le mettre dans mon modèle de formulaire. Dans le modèle de formulaire, j'ai aussi une variable currentTitleId ou selectedTitleId pour stocker la valeur de l'élément sélectionné. Ce nom de champ est défini dans le « chemin » du combobox de printemps et le titleList est défini dans les « éléments ». Ensuite, la valeur que vous voulez lier est situé dans la « ItemValue » et le texte à afficher pour cette valeur dans « itemLabel ». Voilà.

Dans mon modèle de formulaire:

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

List titleList = getTitlesFromMyDatabaseHereOrSomewhereElse();

Dans mon jsp:

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

Je suppose que votre classe de titre sera quelque chose comme ceci:

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

Vous pouvez aussi vous personnaliser COMBOBOX un peu plus comme ceci:

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

Autres conseils

Je ne suis pas sûr de Spring Web Flow, mais avec la normale Spring MVC, il suffit d'enregistrer un nouveau PropertyEditor et ce genre de choses fonctionne automatiquement

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

http: // statique .springframework.org / printemps / docs / 2.5.x / référence / mvc.html #-mvc-webdatabinder ann

Je voudrais créer un nouveau PropertyEditor qui obtient un service ou dao qui serait responsable de l'obtention des données de la base de données, et dans le PropertyEditor vous convertir l'identifiant à votre type de clé et obtenir la valeur de la base de données et le retour il. Je n'ai pas un exemple bien avec moi, mais j'espère que vous obtenez l'essentiel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top