Thursday, November 19, 2009

Видео лекции по JavaServer Faces

JavaServer Faces — это технология создания веб-приложений, на основе визуальных компонент. Она является одним из стандартов среди технологий J2EE. Главной отличительной особенностью от других существующих технологий построения веб-приложений на языке Java является то, что в JSF все строится на так называемых визуальных компонентах, которые принимают вводимые данные от пользователя, передавая их в код приложения, а также выводят данные приложения в определенной форме. На самом деле JSF — это больше, чем набор компонент и API для управления ими.

Во-первых, JSF — это спецификация. На данный момент активно дорабатывается версия 2.0 и, если я правильно все понял, то уже в J2EE 6 она появится. До этой версии стандартной была версия 1.2, которую использовать было сложно без применения дополнительных библиотек, таких как Facelets, PrettyFaces, RichFaces или другие AJAX библиотеки. Популярной реализацией JSF спецификации является Project Mojarra. Также существует реализация от Apache, которая называется MyFaces.

Во-вторых, JSF — это полноценный фреймворк, на базе которого можно создавать веб-приложения. Кроме визуальных компонент, существует настраиваемая система навигации между страницами, контейнер бинов (managed beans с инжекцией зависимостей), обработка событий, поддержка EL-языка, управление состояниями компонент и приложения. И, наверное, не менее важное то, что JSF позволяет изменять и расширять свою функциональность, имея стандартизированный API.

JSF я начал изучать сам в далеком 2007 года. Я открыл обычный J2EE туториал и внимательно перечитал раздел, связанный с JSF. Я считаю, что невозможно выучить какую-либо технологию, не создав чего-либо с ее помощью. Поэтому, я создал небольшое серверное приложение GTalkWap, которое позволяло заходить на веб-странички с помощью мобильного телефона с поддержкой WAP и общаться в сети GoogleTalk. У меня тогда был очень слабенький мобильный телефон, Java-приложения на нем не запускались, и поэтому общение таким образом меня очень даже радовало. Запустив это приложение на университетском сервере, я им активно пользовался.

Позже я узнал про существование замечательной технологии Facelets, которая позволила избавиться от использования JSP страниц, а отображение определять в XHTML. Также она позволила использовать шаблоны страниц, которые мне понравились больше, чем те, что были тогда в библиотеке Tiles от Apache. С самого начала изучения JSF я знал про существование различных библиотек визуальных компонент. Но как только я начал использовать RichFaces от JBoss, JSF завоевал мое сердце.

Рассказывая студентам на лекциях о JSF, я старался покрыть как можно больше материала, не вдаваясь в сложные технические подробности. Сравнивать им было не с чем, так как до этого они знали только JSP, поэтому JSF для них был новой технологией. И чтобы не отбить интерес, я заострял внимание на основных фишках, которые упрощали создание веб-приложений, оставляя детали на самостоятельное изучение. Также отдельно я останавливался на интеграции Spring и JSF, так как весь проект был построен на основе Spring. Специально для студентов я создал приложение-пример ExampleTPPS, в котором отразил использование таких технологий, как Spring, JPA, Hibernate, AspectJ, JSF, Facelets, RichFaces, Log4J, Ant, JUnit.

Кстати, на счет самостоятельного изучения JSF, то могу порекомендовать вот этот небольшой туториал на русском языке от IBM, а также книгу Facelets Essentials: Guide to JavaServer Faces View Definition Framework (попробовать скачать можно тут), ну и, конечно, собственные лекции, которые идут ниже. :)















Update: Ниже выкладываю ссылки на слайды лекций, чтобы Вы их смогли скачать и использовать в своей практике.
Лекция 14, Лекция 15, Лекция 16, Лекция 17, Лекция 18, Лекция 19, Лекция 20

14 comments:

AtkinArt said...

Посмотрел видео про Интернационализацию и возник вопрос, как же на лету переключить язык, например при щелчке на <h:command...

Yuriy said...

Чтобы на лету менять язык, тебе надо выполнить несколько действий:
- Добавить поддержку локали другой в конфиги, как это я рассказал на лекции.
- Создать сессионный бин, где будет храниться значение локали. Он будет инициализироваться локалью по-умолчанию.
- По ссылке в параметре передавать желаемую локаль и устанаваливать ее в этот бин, после чего вызывать у него метод изменения локали.
- В методе обработчике установить локаль используя FacesContext.getCurrentInstance().getViewRoot().setLocale

Если же ты хочешь, чтобы пользователь сразу попадал на нужную локаль, тогда есть несколько вариантов:
- Либо запоминаешь локаль в cookie, но тогда его надо будет считывать и обрабатывать
- Либо во все URL добавляешь параметр локали, а потом фильтром считываешь его и устанаваливаешь в бин.

Можешь посмотреть даже примеры кода здесь: http://www.coderanch.com/t/447920/JSF/java/JSF-Locale

AtkinArt said...

Большое спасибо за оперативный ответ, всё поучилось. У меня возник один вопрос. Можно ли из одного бина обращаться к другому? И хотелось бы узнать как обычно в JSF делают авторизацию и аутентификацию? Заранее спасибо.

Yuriy said...

Рад, что все получилось!

Из одного бина ты, конечно, можешь обратиться к другому. Для этого, можешь определить поле в одном бине, которое будет класса другого бина. Создать геттеры/сеттеры для этого поля. Потом в faces-config.xml, там где ты определяешь первый бин, ты указываешь у него managed-property и ставишь ей значение имени второго бина. Т.е. ты как бы инжектишь один бин в другой. Ну и потом можешь обращаться к другому бину.

Авторизацию и аутентификацию делают по-разному. Можно в лоб: два поля, одно для логина, другое для пароля, а в методе бина лезть куда-то (в базу, ldap, ...) и проверять данные. Можно более сложным и защищенным способом. Загляни по этой ссылке, там предлагают несколько вариантов: http://stackoverflow.com/questions/1187949/jsf-authentication-and-authorization

AtkinArt said...

Большое спасибо за помощь, с авторизацией не всё так просто как хотелось бы, в большинстве нужно настраивать среду выполнения, но когда это удалённый хостинг то ничего такого не возможно. Ещё раз спасибо и ждём новых постов по Java и J2EE

Anonymous said...

Очень хороши лекции. Спасибо Вам большое за такой вклад.
Где можно скачать Ваши лекции???

Yuriy said...

Рад, что Вам нравятся лекции. Собственно скачать их можно прямо с youtube. Например, можешь воспользоваться сайтом en.savefrom.net

Anonymous said...

Спасибо большое за ответ как скачать лекции. У меня еще вопрос. Не могу скачать книгу с Вашего сайта, ссылку на которую Вы указали в лекции №15. Подскажите как скачать ее? Где можно прочитать еще про локализацию и обработку сообщений? Делаю как Вы рассказываете у меня ничего не выходит. Одним словом - новичок я.
Еще раз спасибо большое.

Yuriy said...

Попробуй скачать, например, тут: http://bit.ly/eNXXuX Ну или поищи ее по названию в интернете :)

Unknown said...

Спасибо за лекции. Оч интересно.
Было бы еще замечательно, если бы Вы рассказали о backing bean'ах, с использованием аннотаций JBoss, механизма инжекции и т.д.

Anonymous said...

Добрый день.
Спасибо большое за лекции по JPA. Ооочень сильно.
У меня вопрос. Скажите пожалуйста, как вызвать из управляющего bean'а JSF метод REST Web Servic'а??? Может подскажите, где прочитать. Я уже весь инет перерыл. Есть примеры получения строки с помощью HttpURLConnection, но мне интересно получение объектов ResultSet, например. Если это извращение, то скажите мне.

Anton said...

Доброго дня! Лекції супер! Чи варто чекати лекцій по JMS i WEB-services? Такі важливі теми і залишились без уваги!

Unknown said...
This comment has been removed by the author.
Anonymous said...

каким образом можно реализовать композитный валидатор? например, дата начала должна быть раньше даты окончания к.-л. процесса? Можно ли это реализовать, не прибегая к помощи JavaScript, а решать только средствами JSF?