Мой путь в Open Source :) Михаил Богданов

вторник янв 27, 2009

В прошлой записи я рассказал о нашем проекте VoIP WebAdmin (название рабочее). Теперь я хочу поговорить о нем с технической точки зрения: используемые технологии и мои впечатления от работы с ними.

Итак, программа представляет собой веб-приложение. Для разработки был выбран web application framework - Java Server Faces.

Впечатления двоякие. С одной стороны пока делаешь стандартные действия, проблем не возникает и скорость разработки оказывается высокой. Например связь данных и интерфейса, табличное представление информации и прочее...

Но стоит сделать шаг в сторону и начинаются проблемы. Элементарный пример: пусть мы хотим задать задать элементу Text Field ширину 300px. Казалось бы, что проще?! Выделаем в NetBeans компонент textField1 и ищем свойство Width... не находим :) Ладно, пусть так, зато находим свойство Style. Вот это то что нужно! CSS как раз для этого и создан. Пишем туда заветную строчку: width: 300px; Выглядит это так:


Открываем страницу в браузере... Тут нас ждет разочарование! Поле как было своего размера (примерно 150px), так и осталось.

Начинаем разбираться в чем проблема, CSS есть CSS он должен работать везде. Поможет нам великолепный модуль к Firefox - Firebug. С помощью него находим html код, в который JSF преобразовал наш textField1.

Не правда ли многовато для одного контрола? Но главное не это. Посмотрите к чему JSF применил наш Style! к компоненту <span>  в котором лежит наш <input>, размер которого мы хотели менять. А это значит что какие бы мы не указывали width и height для textField1, размер не изменится. Вот так все печально.

Решение проблемы конечно есть. Не красивое, но есть. Дело в том что в CSS есть возможность определять стили для дочерних элементов компонента  класса. А наш input это как раз дочерний элемент контейнера <span>, к которому JSF наш класс и применит.

Работает это так:

Теперь сомотрим в браузер и радуемся :)

Несмотря на то что проблема решена, остается вопрос, почему такая простая вещь делается таким нестандартным способом? И это не единственный случай, с которым я столкнулся.

И думаю что я могу дать ответ на этот вопрос. Дело в том что JSF позиционируется как Framework для создания web-приложений, а не сайтов. Никогда не понимал в чем разница между ними, а сейчас кажется понял. Web-приложение предполагает большую функциоанльность, но неприхотливость в вопросе интерфейса. JSF предоставляет богатый набор компонентов в расчете на то что разработчик не будет пытаться изменить их внешний вид. Цель JSF - максимально приблизить разработку Web-интерфейса к созданию обычного приложения на Swing. И на мой взгляд он с этой задачей достойно справляется.

Комментарии:

Вы путаете JSF в целом и конкретную библиотеку тэгов. Не пугайте людей, все не так плохо )). Слава богу, редко кто здесь бывает, видимо )). Есть хорошие библиотеки, типа Apache Tobago или RichFaces. У каждой своя реализация, свои подходы. Общего между ними - стандарт JSF, который позволяет подключать библиотеки визуальных компонентов к веб-приложению. Но в одном соглашусь: да, HTML и основанные на нем подходы к созданию веб-интерфейса, это прошлый век веб-разработки. Технологии типа Flex, Silverlight или JavaFX неминуемо займут место старых и сложных подходов.

опубликовал Nikolay Апрель 25, 2009 at 09:19 AM GMT-05:00 #

Nikolay, полостью с Вами согласен, буквально через неделю после публикации поста, я опробовал разные библиотеки и осознал ошибку. Я даже пытался переписать под IceFaces, но это оказалось нетривиальной задачей. В итоге Flex решил все проблемы, писать сложные интерфейсы на JSF (или на ASP.NET или на чем то похожем) гораздо трудозатратнее чем штамповать их на флексе.

Так что приношу извинения за слегка искаженную информацию. Кстати та библиотека, о которой я писал называется Woodstock, и я советую Вам держаться от нее подальше! :)

опубликовал Michael Bogdanov Апрель 29, 2009 at 11:15 AM GMT-05:00 #

Опубликовать комментарий:
  • HTML Syntax: Отключен