![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
MisterCleric |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Привет. Нет от JSF ты не отказываешь. Ты просто делаешь конфигурацию backend для JSF в Spring. JSF у тебя остается - он просто делает делегирование в Spring.
MVC тебе здесь не нужно: у тебя же есть FacesServlet, который и решает, какой backingBean вызываеть, а тот уже в свою очередь является SpringBean. Для них обоих их взаимодействие остается прозрачным. 1. В web.xml ты прописываешь как конфигурацию JSF, так и конфигурацию Spring. Главное не забыть это:
Чтобы можно было пользоваться request & session Scope при конфигурации Spring/ 2. В faces-config.xml добавляешь такое:
Все остальное - navigation-rules, converters, validators может остаться без изменения, хотя я тоже последние конфигурю в Spring 3. И того: у тебя получается приложение на JSF, просто его бины сконфигурены в другом контейнере. -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||
|
|||||
isabsent |
|
||||||||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
Пробую реализовать вашу программу на основе референсного примера из пакета Spring Web Flow 2.3 swf-booking-faces В нем разбирается Spring-centric интеграция Spring, Hibernate с JSF2.0. Столкнулся с необходимостью написания своего собственного конвертера WalletConverter.java, преобразующего строку списка referenceData.wallets в объект Wallet, чтобы вставить его в поле referenceData.wallets при обработке .xhtml страницы с элементом выбора из выпадающего списка:
В референсном примере такой конвертации нет - только "строки <-> числа", поэтому и проблемы такой нет. На сколько я понял и мануалов, я должен добавить объявление конвертора в faces-config.xml
В WalletConverter.java мне необходим доступ к объекту walletService из контекста Spring
Проблема в том, что Spring почему-то никак не хочет инжектировать walletService в предназначенное ему аннотацией @Autowired место. Под дебагом я вижу, что перед моментом конвертации вместо walletService стоит ссылка на null. Получать этот бин напрямую из контекста Spring мне не хочется по некоторым причинам. Поэтому возникает вопрос - Как инжектировать бин в JSF-конвертор? Чем тут может помочь добавление
в faces-config.xml ? Поясните плз, почему в web.xml вы говорите, что нужно использовать
Если возможно - выложите plz, исходники вашего приложения или хотя бы конфигурационные файлы web.xml, web-mvc.xml, web-flow.xml и faces-config.xml Это сообщение отредактировал(а) isabsent - 1.5.2011, 12:08 |
||||||||||||||||
|
|||||||||||||||||
RageSteel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: 1 Всего: 2 |
Тебе не нужен JSF-конвертор для твоего случая.
В JSF2 можно просто написать:
Что-же касается конверторов, то их тожно определять с помощью аннотаций. А что касается того, как получить экземпляр сервиса в конверторе. Самое простое — это получить спринговый контекст и запросить у него. Либо нужно как-то встраиваться в процесс создания конверторов в JSF2. |
|||
|
||||
isabsent |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
Спасибо, попробую осмыслить сейчас. Дадите ссылочку на то где это написано? Два дня гуглил - не попадалось ничего похожего... P.S. Проверил вашу подсказку - Exception такой же как и был до того как я понял, что нужно писать конвертер
Это сообщение отредактировал(а) isabsent - 1.5.2011, 12:31 |
||||||
|
|||||||
RageSteel |
|
||||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: 1 Всего: 2 |
Документация по f:selectItems Может у тебя твой конвертор мешается? Я активно пользуюсь этим синтаксисом и у меня с ним проблем не было. У тебя точно JSF 2.0? |
||||
|
|||||
isabsent |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
Судя по jsf-api-2.0.3.jar и jsf-impl-2.0.3.jar в Libraries проекта - надеюсь что JSF2.0... Или еще надо какие-то либы смотреть? Я делаю это под Tomcat 6 - в нем не может быть проблемы?
Может есть какая-то демо-версия или хотя бы основные конфиги - сравнить? Видимо я что-то не так делаю. По прежнему пытается найти конверторы - 'null Converter' в Exception... P.S. Никак не пойму как указание параметров itemValue и itemLabel на .xhtml-странице поможет мне вытащить нужный объект wallet из ArrayList<SelectItem> и поместить его поместить в поле newOutcome.wallet.
Может у вас там что-то типа Using a Backing Map организовано и поэтому всё работает? Это сообщение отредактировал(а) isabsent - 1.5.2011, 15:36 |
|||
|
||||
RageSteel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: 1 Всего: 2 |
Для использования itemLabel и itemValue метод getWallets должен возвращать не список SelectItem'ов, а просто список объектов Wallet, без преобразования.
|
|||
|
||||
isabsent |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
Точно! Невнимательно прочёл jsf-доку...
Переписал
И всё равно -
Это сообщение отредактировал(а) isabsent - 1.5.2011, 17:55 |
||||||
|
|||||||
RageSteel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: 1 Всего: 2 |
То что оно пишет в консоль Debug, может это от того, что у тебя на странице нет <h:messages />?
Конверторов больше никаких нет, ни в faces-config ни в классах с аннотациями? Тип newOutcome.wallet точно принимает значение типа Wallet? Почему в логах пишет Wallet(Cash), откуда берётся Cash? В какой момент возникает сообщение? При отображении страницы или при осуществлении действия? |
|||
|
||||
isabsent |
|
||||||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
У меня нет странице <h:messages />. А для чего оно там нужно? В логах пишет Wallet(Cash) потому что берет мой переопределенный wallet.toString() и выводит его в консоль.
Его же выводит и в выпадающих списках на веб-странице. Cash - это ID одного из Wallet - того, которого я выбрал из выпадающего списка перед тем как нажать на кнопку чтобы сохранить объект newOutcome в базу. Все упоминания о конверторах выкинул ОТОВСЮДУ и сами классы конверторов удалил из проекта. В main-flow.xml
Сообщение возникает при выполнении действия. До этого всё отрабатывается без ошибок.
Полный лог того что происходит после нажатия на кнопку:
А как должен быть аннотирован тот класс, в котором я делаю
У меня просто @Service стоит. Может надо @Scope(request) какой-нибудь? Это сообщение отредактировал(а) isabsent - 1.5.2011, 19:27 |
||||||||||||||
|
|||||||||||||||
RageSteel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: 1 Всего: 2 |
Ух. А можешь проект куда-нибудь выложить? А то у меня остаются только мысли вроде: «может что-то не так с развёртыванием и где-то остались старые файлы».
<h:messages /> нужно для отображения сообщения JSF'а. В частности туда бы у тебя вывелись сообщения о необходимости конвертации. Что-же касается аннотаций @Service. Я знаю что там у Spring'а по умолчанию, но то что у тебя правильно выводит списки означает, что оно работает. |
|||
|
||||
isabsent |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
Попробовал на Гугл выложить - что-то по ссылке архив не загружается... Сейчас подумаю - куда еще можно. Может проще на мыло выслать?
А! Вот - догадался и сюда выложил ![]() Это сообщение отредактировал(а) isabsent - 1.5.2011, 20:48 |
|||
|
||||
RageSteel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: 1 Всего: 2 |
||||
|
||||
isabsent |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
Перевыложил архив - замените плз. Там была версия с вариантом backing Map и кое-какие мелочи поправил.
На первой странице в левом верхнем углу нажать на login На второй странице выбрать из предложенного списка login/password и нажать Login На третьей ничего не вводить - только нажать Find Outcomes На четвертой выбрать что-нибудь из выпадающих списков, в третье поле вставить 120.00, по четвертому щелкнуть и выбрать дату, в пятое вставить любой текст и нажать кнопку Save справа от строки ввода. После этого в логе появятся DEBUG'и с error'ами на тему Conversion Error setting value 'Wallet(Cash)' for 'null Converter Это сообщение отредактировал(а) isabsent - 1.5.2011, 21:13 Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() |
|||
|
||||
isabsent |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.5.2010 Репутация: нет Всего: нет |
Сейчас выкину всё лишнее - две страницы, две таблицы, скрипт для их создания - и выложу.
На первой странице - перейти по ссылке "Start your Spring Travel experience" На второй странице выбрать что-нибудь из выпадающего списка, во второе поле вставить 120.00, по третьему щелкнуть и выбрать дату, в пятое вставить любой текст и нажать кнопку "Save". Это сообщение отредактировал(а) isabsent - 2.5.2011, 10:23 Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |