LXF84:Что за штука...

Материал из Linuxformat.

Перейти к: навигация, поиск

Что за штука... Java Server Faces?

Ричард Драммонд прослышал о более простом и быстром способе строительства web-приложений. Определенно стоит разобраться…

Сейчас много шумят об этой новой web-технологии, JavaServer Faces. Для чего она?

JavaServer Faces (сокращенно JSF) – компонентная платформа, призванная упростить разработку пользовательских интерфейсов для web-приложений Java. Это…

Секундочку. У нас уже есть Struts, Tapestry, WebWork и nauseam. Зачем создавать еще одну платформу для Java-приложений?

В том-то и часть проблемы: много несовместимых платформ. Однако JSF – открытый стандарт, разрабатываемый в рамках Java Community Process, и представители многих популярных, но нестандартных платформ внесли свою лепту в разработку спецификации JSF (текущая версия JSF 1.2). Спецификация открытая, и применять ее может каждый. Sun, кстати, выпустила стандартную реализацию.

Ясно. Но чем JSF отличается от, скажем, Jakarta Struts?

Тем, что у этих проектов разные цели. Struts – завершенная платформа, позволяющая упростить построение Java-приложений с использованием парадигмы модель-вид-контроллер (MVC). JSF сосредоточена на одной части парадигмы, виде.

Вид — то есть вид web-приложений, отсюда и «Faces»?

Точно. MVC – программная архитектура, четко разделяющая пользовательское приложение на три части: Модель (часть программы, содержащая данные), Вид (представление данных, позволяющее пользователю взаимодействовать с программой) и Управление (обработка событий, например, пользовательского ввода, и обновление в соответствии с этими событиями Модели и/или Вида). Архитектура MVC успешно используется некоторыми современными средами разработки, включая Cocoa для Mac OS X, Microsoft Foundation Classes и Swing для Java. Теперь наблюдается, что подобный подход начал применяться и к web-приложениям, отсюда и популярность Struts.

Спасибо за объяснение технологии, но что MVC даст лично мне?

Если рассматривать приложение таким образом, можно отделить модель от вида. Это особенно актуально для web-приложений. Вспомните только, как часто популярные сайты подвергаются визуальному обновлению (меняется вид), а обрабатываемые ими данные (модель) остаются неизменными. Кроме того, в web-разработках и у программиста, и у дизайнера (который не обязательно разбирается в программировании) должна быть возможность трудиться над приложением вместе. Наконец, вам могут понадобиться различные методы доставки web-приложения пользователям: скажем, вы работаете с HTML-интерфейсом для настольных компьютеров, а с WML – для мобильных устройств. Благодаря MVC решение этих задач существенно упрощается.

Если JSF занимается только видом, чем она лучше Struts, которая умеет все?

Не обязательно быть во всем лучше всех. JSF лучше только для построения пользовательских интерфейсов. Вполне возможно совместное использование Struts и JSF в одном приложении – есть даже дочерний проект Struts под названием Shale, для более плотной интеграции с JSF (см. http://shale.apache.org).

Об этом хватит! Расскажите подробнее о JSF.

Вижу, вас надо хорошенько убедить. Ладно. Иногда JSF называют «Swing для web-приложений», и это правильно (как известно, Swing – стандартная среда разработки графических пользовательских интерфейсов, GUI, на чистом Java). Со Swing легко изменять способы отображения компонентов интерфейса или создавать особые компоненты, а также использовать визуальные редакторы интерфейсов. Все эти преимущества применимы к JSF, но не к Struts.

Вы приводите сравнение со Swing. Это, повашему, убедительно?

Да забудьте вы эту Swing-фобию! Ведь вы же сможете строить интерфейс web-приложения так же легко, как строится простой GUI – перетаскиванием компонентов в UI-конструктор; это ли не здорово?

Допустим. Но интерфейс для web и для обычных платформ – не одно и то же. Осуществима ли эта идея?

Да, поскольку JSF моделирует интерфейсы точно так же, как традиционные среды разработки, в частности, Swing. В основе JSF лежит API, позволяющий создавать компоненты интерфейса, не зависящие от устройства вывода. Этот API управляет всеми вопросами, связанными с пользовательским интерфейсом: жизненным циклом, обработкой событий, персистентностью (способность сохранять и поддерживать объекты) и навигацией. JSF предоставляет также базовый набор компонентов GUI, знакомых дизайнеру любых интерфейсов.

Как это отразится на HTML-интерфейсе, который я вижу в браузере?

Основные компоненты интерфейса JSF существуют на серверной стороне приложения и не зависят от средств представления. Однако нынешняя спецификация JSF требует применения рендерера, способного отображать компоненты пользовательского интерфейса как HTML, через JavaServer Pages (JSP). Возможны и другие технологии представления, но поддержка JSP обязательна.

Погодите продолжать, поясните, пожалуйста, что такое JavaServer Pages?

С удовольствием. Основа технологии генерации динамического web-контента с сервера Java-приложений – это сервлет. Но строительство пользовательского интерфейса только через сервлеты весьма проблематично: встраивать весь генерируемый контент (в основном HTML) внутрь Java-кода – задача непосильная. Поэтому и появилась JavaServer Pages. Теперь все наоборот: можно добавить в HTML особые тэги, исполняющие необходимый для генерации динамического контента Java-код, а то и встроить этот код непосредственно в HTML-страницу.

А применение JSF обязательно требует поддержки JSP?

Да, поставляется библиотека тэгов JSP с особыми тэгами, позволяющими оперировать с компонентами пользовательского интерфейса JSF. Например, если вы хотите представить пользователю данные в виде таблицы, нужно воспользоваться соответствующим JSF-тэгом. JSF возьмет на себя генерацию таблицы в виде HTML-кода в ответ на пользовательский запрос, а web-контейнер доставит ее в браузер пользователя.

Полагаю, ввод данных в страницы JSF не составит труда…

К сожалению, избежать Java-кодирования не получится. Каждая страница JSF связана с «бином» (bean), который передает значения компонентам JSF, занимается обработкой событий, проверкой введенных данных и т.п. Каждый компонент JSF связывается со свойствами и методами «бина» через атрибуты тэгов JSF

ОК, вы заинтриговали меня. С чего же начать разработку в JSF?

Можно начать разработку с помощью web-контейнера типа Tomcat, вручную инсталлировать экземпляр JSF, затем в простом текстовом редакторе создать шаблоны и необходимый Java-код. Однако простейший путь – зарегистрироваться в Sun Developer Network и установить новейшую версию Sun Studio Creator (см. http://developers.sun.com/prodtech/javatools/jscreator). Это полный пакет для JSF-разработки, включающий Java IDE, визуальный конструктор и сервер приложений. Регистрация свободная, а загрузка Creator для зарегистрированных членов бесплатна.

Хм. А нет ли других решений среди свободного ПО?

Creator от Sun основывается на открытом NetBeans IDE, но в текущей стабильной версии NetBeans еще нет визуальных инструментов для работы с JSF.

Вы сказали, что JSF – открытый стандарт. Нет ли других вариантов, кроме как от Sun?

Конечно, есть: например, Apache MyFaces (см. http://myfaces. apache.org).

Хотелось бы познакомиться с библиотеками компонентов JSF.

Отлично! Попробуйте ADF Faces от Oracle (http://www.oracle.com/technology/products/jdev/htdocs/partners/addins/exchange/jsf).

А где можно подробнее узнать о JavaServer Pages?

Рекомендую http://java.sun.com/javaee/javaserverfaces. Там можно найти информацию и ссылки на многочисленные статьи и руководства по JSF.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию