Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring + Hibernate + JSF 2.0 
:(
    Опции темы
isabsent
Дата 2.5.2011, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Похоже, что вы имели ввиду вывод данных из бина в выпадающий список на странице. С этим у меня проблем не было с самого начала. А я спрашивал о конвертации в обратном направлении - из выпадающего списка на странице в поле объекта (а не просто в строку или число как в примере из SWF). 
PM MAIL   Вверх
RageSteel
  Дата 2.5.2011, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.2.2010

Репутация: 1
Всего: 2



Да, был не прав. Если просто вставить itemValue=#{w} то в html в значении option будет значение Wallet.toString(), что не верно.
Моё предложение, чтобы не связываться с конверторами: поместить в itemValue значение индентификатора Wallet. Тогда во время сохранения можно будет его восстановить.
Собственно я сделал ещё более «лёгкую» версию, только JSF2.0, безо всякого Spring'а. Недеюсь принцип понятен.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  webkeeper_lite.zip 8,59 Kb
PM MAIL   Вверх
isabsent
Дата 2.5.2011, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Спасибо - разберу ваш пример. Для тех кто нас прочтёт  smile  - если хочется обойтись JSF только в качестве view, а весь IoC иметь от spring то, похоже, единственно правильный путь - делать как учил товарищ BalusC Using a Backing Map

Если кто-то знает как внедрить Spring-бины в JSF-конвертер - очень хотелось бы услышать. (Только не через вытаскивание посредством Spring-контекста).
PM MAIL   Вверх
RageSteel
  Дата 2.5.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.2.2010

Репутация: 1
Всего: 2



Внедрить Spring-Bean'ы в JSF-конвертор — вот ещё один вариант.
Если посмотреть со стороны JSF — то правильный способ — Spring должен предоставлять реализацию JSF ApplicationFactory, которая в методе createConvertor возвращала бы экземпляр с внедрёнными зависимостями.
Но…, почему ты так хочешь воспользоваться именно конвертором?
PM MAIL   Вверх
isabsent
Дата 3.5.2011, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Цитата(RageSteel @ 2.5.2011,  21:02)
Внедрить Spring-Bean'ы в JSF-конвертор — вот ещё один вариант.
Если посмотреть со стороны JSF — то правильный способ — Spring должен предоставлять реализацию JSF ApplicationFactory, которая в методе createConvertor возвращала бы экземпляр с внедрёнными зависимостями.
Но…, почему ты так хочешь воспользоваться именно конвертором?

Понять будет ли то что тут предложено работать и как Внедрить Spring-Bean'ы в JSF-конвертор мне пока не хватает опыта. Вот если бы там рабочий пример был... 

JSF ApplicationFactory - она уже есть в Spring или подразумевается, что я сам её напишу? 

Потому что конвертор - это стандартный подход в JSF. Не нужно реализовывать подпорки типа той, что описана у BalusC. И вроде всё для него есть - одна только проблема - заставить JSF увидеть бин walletService...
Код

package org.springframework.webflow.samples.booking;

@Component
public class WalletConverter implements Converter  {

    @Autowired
    private WalletService walletService;

    public Wallet getAsObject(FacesContext context, UIComponent component, String name) {
        return walletService.getWalletByName(name);
    }

    public String getAsString(FacesContext context, UIComponent component, Object value) {
        Wallet wallet = (Wallet) value;
        return wallet.getName();
    }
}


Это сообщение отредактировал(а) isabsent - 3.5.2011, 07:03
PM MAIL   Вверх
RageSteel
  Дата 3.5.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.2.2010

Репутация: 1
Всего: 2



В Spring'е я такого не обнаружил, хотя он вполне там и мог бы быть. Самому писать лениво — Spring мне не особо интересен но общий принцип простой. Реализуем ApplicationFactory, где все методы кроме создания Application переправляем в оригинальную ApplicationFactory. В методе создания Application оборачиваем созданный Application с помощью ApplicationWrapper, где в свою очередь переопределяем метод возвращения конвертора. Вместо него пишем получаем Bean конвертора из Spring'а. Как-то так.

Может способ, приведённый на stackoverflow всех устраивает (@Component("myConverter")).
PM MAIL   Вверх
MisterCleric
Дата 4.5.2011, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Насчет конвертеров и валидаторов.
Зачем их определять в faces-config.xml, если у тебя есть Spring?
Просто берешь их и определяешь как Spring бины, разве что имплементишь нужные интерфейсы. И будет тебе счастье с @Autowired.
Разве что нужно быть аккуратным со scope, чтобы они не оказались у тебя на все приложение, да и чтобы не получился scope impedans.

И насчет RequestContextListener.

Такова рекомендация интеграции JSF+Spring. Он нужен для того, чтобы мокжно было работать со scopes session & request.
а также в его исходниках так и написано:
Цитата

This listener is mainly for use with third-party servlets, e.g. the JSF FacesServlet.




--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
isabsent
Дата 8.5.2011, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Цитата(MisterCleric @ 4.5.2011,  10:45)
Насчет конвертеров и валидаторов.
Зачем их определять в faces-config.xml, если у тебя есть Spring?
Просто берешь их и определяешь как Spring бины, разве что имплементишь нужные интерфейсы. И будет тебе счастье с @Autowired.

Золотые слова! Жаль, что сразу не доходят - только после того как на всех граблях постоишь... Не забывайте переопределять equals() и hashCode() у бина, для которого пишется свой пользовательский Converter - иначе долгий и упорный "Validation Error: Value is not valid" в элементах типа selectOneMenu...

Странно, почему конвертер в JSF так выделен среди других классов? Ведь можно же инжектировать Spring-бины в другие JSF-бины (вот, например, без проблем инжектятся), а как только класс implements Converter, так всё это благолепие рушится и остаётся один грубый FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance()).getBean("yourServiceBean")! Почему так?!

Это сообщение отредактировал(а) isabsent - 8.5.2011, 22:17
PM MAIL   Вверх
RageSteel
  Дата 9.5.2011, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.2.2010

Репутация: 1
Всего: 2



Цитата(isabsent @ 8.5.2011,  19:55)
Странно, почему конвертер в JSF так выделен среди других классов? Ведь можно же инжектировать Spring-бины в другие JSF-бины (вот, например, без проблем инжектятся), а как только класс implements Converter, так всё это благолепие рушится и остаётся один грубый FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance()).getBean("yourServiceBean")! Почему так?!

В приведённой ссылкы injectируется результат выполнения Expression Language выражение, а так как используется Spring EL Resolver, то там работает подключение Spring-Bean'ов. Жизненный цикл конвертора управляется JSF'ом, который ничего про Spring не знает.
PM MAIL   Вверх
isabsent
Дата 9.5.2011, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Цитата(RageSteel @ 9.5.2011,  06:11)
В приведённой ссылкы injectируется результат выполнения Expression Language выражение, а так как используется Spring EL Resolver, то там работает подключение Spring-Bean'ов. Жизненный цикл конвертора управляется JSF'ом, который ничего про Spring не знает.

В приведённой ссылке жизненный цикл бина BikeDetails, в который легко и непринуждённо инжектируется Spring-бин bikeDataProvider, находится под управлением JSF IoC. Однако в JSF Converter, точно так же находящийся под управлением JSF IoC, невозможно инжектировать ничего, что находится под управлением Spring IoC - даже с помощью EL-Resolver. Поэтому я не совсем понимаю ваш ответ - ведь ситуация одна и та же, а spring-бин не инжектируется во втором случае...
PM MAIL   Вверх
RageSteel
  Дата 9.5.2011, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.2.2010

Репутация: 1
Всего: 2



Не совсем так. В BikeDetails inject'ируется не Spring Bean, а результат выполнения ExpressionLanguage выражения! И Spring представляет реализацию ELResolver'а, который может получать доступ к Spring'овым Bean'ам.
PM MAIL   Вверх
isabsent
Дата 9.5.2011, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Цитата(RageSteel @ 9.5.2011,  10:22)
Не совсем так. В BikeDetails inject'ируется не Spring Bean, а результат выполнения ExpressionLanguage выражения! И Spring представляет реализацию ELResolver'а, который может получать доступ к Spring'овым Bean'ам.

Всё равно непонятно - почему тот же самый результат выполнения ExpressionLanguage выражения не может инжектироваться в Converter!? Чем Converter принципиально отличается от любого другого JSF-бина с точки зрения Spring'a или EL-Resolvera?

Это сообщение отредактировал(а) isabsent - 9.5.2011, 11:39
PM MAIL   Вверх
RageSteel
  Дата 9.5.2011, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.2.2010

Репутация: 1
Всего: 2



Конвертор не поддерживает @ManagedProperty, если я правильно помню.
PM MAIL   Вверх
isabsent
Дата 9.5.2011, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Цитата(RageSteel @ 9.5.2011,  12:13)
Конвертор не поддерживает @ManagedProperty, если я правильно помню.

Да - я в этом на собственной шкуре убедился  smile Осталось понять за что его так обидели те, кто всё это smile придумали и почему они не написали этого в API  smile . Кстати - если он не поддерживает @ManagedProperty, то значит я и находясь только под JSF IoC (без Spring'a вообще) не смогу попользоваться инжекцией какого-нибудь JSF ManagedBean. То есть буду вынужден какими-то статическими методами вызывать свои сервисы или опять же тащить их через Context. В чём смысл таких жёстких ограничений?

Это сообщение отредактировал(а) isabsent - 9.5.2011, 15:35
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.