![]() | |||||||||||
Интеграция XForms и Google Web Toolkit: Часть 2. Создаем формы управления исполнителями и альбомами (исходники)Источник: IBM developerWorks Россия Майкл Галпин
ВведениеВ первой статье нашей серии рассказывалось об основах GWT и XForms, а так же демонстрировалось, как совместное использование обеих технологий может повысить гибкость создания Web-приложений. В данной статье вы создадите простое приложение, содержащее две страницы: одну для просмотра самих рок-исполнителей, а другую - для просмотра их альбомов. Первую страницу вы создадите с помощью GWT на основе интерфейсных компонентов (также называемых виджетами) и Ajax-абстракций, предоставляемых GWT. На неё вы поместите ссылку на вторую страницу, написанную на основе XForms, с использованием модели данных и элементов интерфейса XForms. Предварительные требованияВ данной статье используется GWT версии 1.4 и подключаемый модуль Mozilla XForms версии 0.8. Модуль Mozilla XForms работает с любым браузером на основе Mozilla, например, Firefox или Seamonkey. Использование GWT предполагает определенные знания Java, а так же Web-технологий, таких как HTML и CSS. Кроме этого, в статье широко используется JavaScript. Наконец, поскольку технология XForms разработана в соответствии с парадигмой MVC (Model-View-Control), желательно знакомство с MVC. В то же время опыт использования GWT или XForms хотя и полезен, но необязателен. Мы пользовались Eclipse 3.3 для написания кода к статье, но знание Eclipse тоже не является необходимостью. Использование GWT для управления списком исполнителейПервая необходимая вещь в нашем приложении - это список исполнителей, разумеется, с возможностью добавлениях новых звезд. Вдобавок к этому нужно реализовать возможность перехода от конкретного исполнителя к странице, отображающей список его альбомов. Первую страницу мы напишем с помощью GWT. При этом содержащиеся в нем виджеты позволят создать симпатичный интерфейс, а его Ajax-абстракции помогут упростить загрузку и сохранение данных. Данные приложенияДанные нашего приложения будут сохраняться в простых XML-файлах. XML - это широко распространенный формат передачи данных, при этом являющийся родным форматом XForms. Конечно, можно хранить данные и в реляционной базе данных, но, скорее всего, вам все равно придется во многих случаях представлять их в виде XML. Таким образом, лучше просто хранить данные в XML, что позволит сосредоточиться на главном: технологиях GWT и XForms. Модель исполнителя в GWTНам понадобится некая простая модель для манипулирования исполнителями в нашем приложении. При использовании GWT в качестве такой модели легко использовать простой Java-класс, как показано в листинге 1. Листинг 1. Java Bean, описывающий модель исполнителя
Повторимся, эта модель - это всего лишь стандартный класс-компонент, удовлетворяющий спецификации Java Bean. Он содержит три поля и предоставляет к ним соответствующие методы доступа и модификации. Вам понадобился бы примерно такой же компонент, если бы вы использовали в качестве модели исполнителя таблицу БД. Заметим, что этот класс находится в клиентском пакете нашего приложения и, соответственно, будет скомпилирован в код на JavaScript. Но в данном случае это не играет никакой роли, т.к., вы можете смело писать на Java, не заботясь о последующем преобразовании в JavaScript. Также отметим, что класс реализует интерфейс Использование виджетов GWT для отображения списка исполнителейОдним из многочисленных преимуществ GWT является входящий в него набор виджетов для распространенных элементов пользовательского интерфейса. При этом вы можете описывать ваш интерфейс на Java, что очень просто, особенно если у вас есть опыт использования Swing или SWT. В нашем случае мы воспользуемся виджетом FlexTable, который представляет собой динамически расширяемую таблицу. Число строк FlexTable будет увеличиваться по мере добавления исполнителей, что удобно, т.к. число последних заранее неизвестно. Код заполнения таблицы показан в листинге 2. Листинг 2. Создание таблицы исполнителей
Код в листинге 2 вначале очищает таблицу, если это необходимо. Затем создается заголовок. При этом единственной особенностью является присвоение заголовку стиля; обратите внимание на этот момент. Далее исполнители добавляются в таблицу по мере итерирования по списку. В листинге 3 приведено HTML-содержимое страницы, на которую помещается таблица с исполнителями. Листинг 3. Страница исполнителей
Как видите, страница крайне простая, всю "грязную" работу делает GWT. Единственное, что от вас требовалось по части HTML - это добавить определение стиля CSS для заголовка таблицы. Теперь, когда интерфейс для нашей страницы готов, осталось только добавить данные. Мы их получим стандартными методами GWT, т.е. через Ajax. Получение данных об исполнителе: использование асинхронного вызова процедур (RPC)Итак, виджет для отображения списка исполнителей готов, осталось лишь получить сам список. Для этого создадим сервис для управления исполнителями и будем вызывать его асинхронно, например, используя Ajax через GWT. Это стандартный метод асинхронного вызова процедур через GWT (GWT RPC). Начем с объявления интерфейса сервиса, как показано в листинге 4. Листинг 4. Интерфейс сервиса для манипулирования списком исполнителей
Отметим, что наш сервис расширяет стандартный интерфейс Для любого сервиса, который будет асинхронно вызываться через GWT, необходимо создать асинхронную версию интерфейса, как показано в листинге 5. Листинг 5. Асинхронная версия интерфейса сервиса
Самое главное при создании асинхронных версий - это добавление суффикса Async к названию интерфейса сервиса. Благодаря этому правилу именования GWT связывает асинхронный интерфейс с исходным, показанным в листинге 4. Также заметим, что из-за того, что все методы будут вызываться асинхронно, они напрямую не возвращают значения. Вместо этого они принимают дополнительный параметр - объект типа Листинг 6. Реализация интерфейса на стороне сервера
Необходимо отметить несколько важных моментов в данной реализации. Во-первых, вдобавок к реализации нашего интерфейса, класс расширяет Просмотр списка исполнителей в режиме хостаДо этого моменты мы имели дело только с чистым GWT. Одним из преимуществ GWT является возможность запуска приложения в режиме хоста, например, прямо из Eclipse. Но для начала нам понадобятся данные. Пример простого файла данных приведен в листинге 7.
Теперь вы можете запустить приложение. После запуска вы увидите интерфейс, схожий с представленным на рисунке 1. Рисунок 1. Просмотр списка исполнителей в режиме хоста Далее, после отображения списка исполнителей, необходимо создать форму для добавления новых рок-звезд. Добавление исполнителя: создание формы с использованием GWTПервым делом нам нужна форма для ввода данных о новом исполнителе. К счастью, GWT предоставляет виджеты для создания форм. Формы можно создавать программно, например, как показано в листинге 8. Листинг 8. Форма ввода данных на GWT
Как и ранее, код радует глаз своей простотой. Все, что нужно - это создать набор виджетов: надписей, полей для ввода текста и кнопок (а также уже знакомую FlexTable). Кроме этого, нам понадобится пара панелей для размещения виджетов. Наконец, добавим обработчик нажатия на кнопку добавления исполнителя, который будет вызывать один из методов нашего сервиса. Код обработчика показан в листинге 9. Листинг 9. Метод добавления нового исполнителя
Как видите, обращение к сервису происходит через метод асинхронной версии интерфейса. В коде используется очень простой анонимный обработчик обратного вызова, который делает что-то полезное, только если метод сервиса завершается с ошибкой. Такое поведение объясняется тем, что клиентский код добавляет исполнителя в таблицу, не дожидаясь окончания серверной обработки. Это обеспечивает высокую скорость обновления интерфейса при условии редкости возникновения ошибок на стороне сервера. Исходный код приложения можно скачать по ссылке в конце статьи. Пока же посмотрим на пользовательский интерфейс после добавления формы (см. рисунок 2). Рисунок 2. Просмотр и добавление новых исполнителей Введите данные форму и нажмите на кнопку Add Artist. Список исполнителей должен мгновенно принять вид, как на рисунке 3. Рисунок 3. Страница после добавления исполнителя Теперь, после того, как вы научились создавать интерфейсы пользователя с использованием GWT, а также использовать Ajax для передачи и получения данных от серверной части приложения, пришло время попробовать XForms в деле создания страницы для управления альбомами. Использование XForms для управления альбомамиВторая часть разработки нашего приложения будет заключаться в просмотре альбомов конкретных исполнителей. Разумеется, хотелось бы создать всего одну страницу, способную отображать альбомы любого исполнителя. Каким же образом определить, какие именно альбомы должны быть отображены при загрузке страницы? Существует несколько способов решения этой задачи, но мы будем использовать паттерн "команда". Команда должна нести в себе всю информацию, необходимую для создания страницы, а именно: альбомы какого именно исполнителя необходимо отобразить. Для передачи этой информации нам понадобится дополнительный параметр запроса, указывающий на исполнителя; назовем его Создание ссылки с GWT-страницы на страницу XFormsВернемся временно на нашу первую страницу и добавим ссылку на вторую. Код после незначительных изменений показан в листинге 10. Листинг 10. Добавление ссылок к списку исполнителей
Все, что изменилось - это строчка кода, устанавливающая значение левой колонки в таблице исполнителей. Изменив Создание страниц XForms с помощью GWTСтраницы JSP можно создавать аналогично другим Web-ресурсам, например, страницам HTML или CSS. Мы можем продолжать использовать GWT на нашей странице, как и раньше, все, что нужно - это добавить ссылку на файл JavaScript, сгенерированный GWT. Далее необходимо вызвать ранее созданный сервис для загрузки списка альбомов указанного исполнителя. Полученные альбомы можно записывать прямо в модель данных XForms, как показано в листинге 11. Листинг 11. Модель данных с обработкой на стороне сервера
Приведенный в листинге фрагмент Java-кода (скриптлет) управляет отображением списка альбомов, загружаемых, как и ранее, из XML-файлов. Код отбора альбомов находится во внешнем классе и доступен для скачивания как часть исходного кода к статье. В архив также включены необходимые тестовые данные в формате XML. Тестирование страниц XForms в Web-режимеПришло время протестировать нашу страницу для отображения альбомов. До этого момента мы тестировали только страницу исполнителей, используя режим хоста GWT. Хотя приложение можно по-прежнему запускать в режиме хоста, нам придется переключиться в Web-режим для тестирования новой страницы. Почему такие сложности? Вся проблема в том, что для функционирования XForms необходим специальный модуль подключения браузера, которого нет в режиме хоста. На рисунке 4 показано, как переключиться в Web-режим. Рисунок 4. Переключение приложения в Web-режим После нажатия на кнопку Compile/Browse приложение должно переключиться в Web-режим, как показано на рисунке 5. Рисунок 5. Приложение в Web-режиме После переключения приложение должно запуститься в вашем браузере по умолчанию. Теперь вы можете перейти от исполнителя к списку его альбомов (см. рисунок 6), просто щелкнув по ссылке на его имени. Рисунок 6. Тестирование страницы для показа списка альбомов исполнителя В итоге страница показывает альбомы исполнителей; при этом для итерирования по XML-данным модели используются простые элементы управления XForms. В следующей статье мы покажем, как добавить элементы XForms для ввода данных, что полезно представителям звукозаписывающих компаний для пополнения списка альбомов. Альбомы будут сохраняться путем асинхронных запросов через Ajax к GWT-части нашего приложения. ЗаключениеВо второй статье нашей серии было показано, как создавать интерактивные страницы с использованием GWT и связывать их со страницами, созданными на XForms. В третьей части мы немного переделаем наше приложение. Не изменяя функциональности, мы начнем использовать элементы GWT на странице XForms для повышения интерактивности приложения. |