Как мне написать пользовательский конвертер в Spring Web Flow 2?

StackOverflow https://stackoverflow.com/questions/783617

Вопрос

Я использую Web Flow 2.0.7 с Spring MVC и Hibernate.

Моя проблема связана с пользовательскими преобразователями для моих пользовательских типов и подключением к базе данных из моего конвертера.

Допустим, у меня есть типаж Человек и тот Человек имеет поле моего пользовательского типа Название, и все Названия уже есть в моей базе данных.Теперь у меня есть html-форма, в которой пользователь может заполнить Человек экземпляр, включая выбор Название в раскрывающемся списке выбрать.

В определении потока я получаю все Названия из базы данных, и они отображаются в выпадающем списке с использованием пользовательского конвертера, преобразующего Название Для Строка а позже вернемся к Название.

Мой вопрос касается процесса обратного преобразования из Строка (который является идентификатором базы данных, который я устанавливаю в качестве значения для элемента) в правильное Название объект из моей базы данных.В основном:Как это сделать?

До сих пор мне не удалось внедрить titleManager в мой конвертер, чтобы получить доступ к базе данных.Этот сценарий был прокомментирован в Весенний Форум веб-потока.Другим решением могло бы быть кэширование Названия перед рендерингом представления и каким-то образом получить в памяти Название после того, как форма была опубликована.

Я был бы очень признателен, если бы кто-нибудь мог просветить меня, как обращаться с такого рода привязкой данных.До сих пор мне не удавалось заставить его работать, и, таким образом, я получаю минимальное использование от в остальном потрясающих webflows.

Я уже опубликовал поток на плате Web Flow Board, но все еще не хватает лучшей практики, которую я не могу найти сам.

Большое вам спасибо!

Вольфрам

Это было полезно?

Решение

Я использую для этого.По сути, я загружаю список заголовков и помещаю его в свою модель формы.В модели формы у меня также есть переменная currentTitleId или selectedTitleId для хранения значения выбранного элемента.Имя этого поля задается в поле "путь" выпадающего списка spring, а список заголовков - в поле "элементы".Затем значение, которое вы хотите привязать, задается в поле "itemValue", а текст, который будет отображаться для этого значения в поле "itemLabel".Вот и все.

В моей модели формы:

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

List titleList = getTitlesFromMyDatabaseHereOrSomewhereElse();

В моем jsp:

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

Я предполагаю, что ваш класс Title будет чем-то вроде этого:

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

Вы также можете настроить свой выпадающий список немного более подобным образом:

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

Другие советы

Я не очень уверен в Spring Web Flow, но с обычным Spring MVC достаточно зарегистрировать новый PropertyEditor, и тогда этот материал заработает автоматически

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

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

Итак, я бы создал новый PropertyEditor, который получает сервис или dao, который отвечал бы за получение данных из базы данных, и в PropertyEditor вы бы преобразовали идентификатор в свой тип ключа и получили значение из базы данных и вернули его.У меня просто нет с собой подходящего примера, но я надеюсь, вы уловили суть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top