Замечательный Wicket
Все гениальное просто
Год назад я работал в Циклуме над веб проектом. Проект состоял из сотен HTML страниц. Хотя мы использовали Spring MVC, не было ощущения что с GUI все в порядке, знаете почему? Потому что использование одного компонента на разных JSP страницах не совсем так элегантно как хотелось бы. Это проблема касается не только Spring MVC, это проблема для workflow фреймворков, то есть не компонентных фреймворков. Если вы хотите использовать компонент на многих страницах, вам нужно:
- Создать тэг который содержит HTML код компонента.
- Написать метод который обрабатывает HTTP запросы от тэга. Если на странице много вложенных компонентов то это сделать достаточно трудно.
- В контроллере для каждой страницы которая содержит компонент вызвать этот метод.
В таком случае есть смысл отказаться от workflow фреймворка и использовать компонентный фреймворк.
Я начал исследование компонентных фреймворков для Java. Первым кандидатом был JSF. После прочтения книги у меня создалось впечатление что JSF слишком сложен для использования. Несмотря на это, я скачал свежую версию ICEFaces и попробовал написать простое «Hello World» приложение с кнопкой и сообщением. Я потратил два часа на конфигурацию и шесть часов чтобы убрать эксепшен. Не помню точно что это была за ошибка, что-то про invalid JSF context.
Я решил что такой фреймворк мне не нужен. Разработка GUI не самая сложная часть нашей работы, соответственно фреймворк тоже должен быть попроще. Написание своих custom компонентов для JSF является настоящим кошмаром. Нужно написать три или четыре класса на один компонент. Тому есть объективные причины. JSF спроектировали чтобы можно было поддерживать разные рендереры. Например, можно перейти с HTML на WML изменив одну строку в конфиг файле. Но я думаю что WML исчезнет через пару лет, потому что количество мобилок которые отображают HTML растет с каждым годом. Я решил что не могу тратить свое драгоценное время на изучение JSF.
Итак, я сказал решительное «Нет» JSF. Альтернативами были Tapestry and Wicket. Я скачал Wicket и начал изучать документацию. Я был в хорошем смысле удивлен простотой этого фреймворка. Конфигурация предельно проста — нужно только добавит сервлет Wicket’а в web.xml.
Еще одна вещь которая мне нравится в Wicket, это разделение java кода и HTML кода, другими словами separation of concerns. Представьте что вы используете JSP и у вас есть команда состоящая из программистов и веб дизайнера. Обычно веб дизайнер работает с прототипом приложения в виде статических HTML страниц. Если нужно изменить HTML код, веб дизайнер меняет свой прототип и отсылает измнененные файлы программисту. Программист находит JSP, которые нужно изменить в соответствии с прототипом, и изменяет их. Я думаю что этот подход абсолютно неправильный. Если вы используете Wicket, забудьте про этот неправильный подход к правке HTML кода. Просто дайте дизайнеру изменить HTML, вот и все. Участие программиста для правки HTML кода не требуется, и я считаю что это отлично!
Если вы знакомы со Swing, освоить Wicket будет очень просто. Панель Wicket похожа на JPanel, а кнопка в Wicket совсем как JButton. Если нужно обработать HTTP запрос из формы, просто добавляете event listener к кнопке, совсем как в Swing.
Wicket интегрируется с Spring, поддерживает i18n, security. Если бы я сейчас начинал новый веб проект, то выбрал бы Wicket.
Все про українське ІТ в Телеграмі — підписуйтеся на канал редакції DOU
90 коментарів
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.