Недостатки JSF 2.0?Честно говоря, кроме сравнительно крутой кривой обучения, когда у вас нет достаточных знаний о основы веб-разработки (HTML / CSS / JS, на стороне сервера и на стороне клиента и т. Д.) И основыJava Servlet API (запрос / ответ / сеанс, переадресация / перенаправление и т. Д.), Никаких серьезных недостатков не приходит на ум.JSF в своем текущем выпуске все еще нуждается в том, чтобы избавиться от негативного изображения, полученного им в ранние века, во время которого было несколько серьезных недостатков.
JSF 1.0 (март 2004 г.)
Это былПервый выпуск.Он был перегружен ошибками в основных областях и областях производительности, о которых вы не хотите знать.Ваше веб-приложение не всегда работает так, как вы ожидаете.Вы, как разработчик, очень сильно хотели бы плакать.
JSF 1.1 (май 2004 г.)
Это был релиз исправления ошибки.Производительность по-прежнему не сильно улучшилась.Был также один существенный недостаток: вы не можете безупречно встроить HTML на странице JSF.Весь простой ванильный HTML-код отображается до дерева компонентов JSF.Вам нужно обернуть все простые ванили в теги <f:verbatim>
, чтобы они были включены в дерево компонентов JSF.Хотя это было в соответствии со спецификацией, это получило много критики.См. Также JSF / Facelets: почему не стоит смешивать JSF / Facelets с тегами HTML?
JSF 1.2 (май 2006 г.)
Это былПервый выпуск новой команды разработчиков JSF под руководством Райана Любке.Новая команда проделала огромную работу.Также были изменения в спецификации.Основным изменением было улучшение обработки представления.Это не только полностью отделил JSF от JSP, поэтому можно было использовать технологию представления, отличную от JSP, но также позволило разработчикам встроить простой ванильный HTML-код в страницу JSF без лишних хлопот с тегами <f:verbatim>
.Еще одним важным направлением деятельности новой команды было улучшение производительности.В течение жизненного цикла эталонной реализации Sun JSF 1.2 (кодовое название Mojarra , начиная со сборки 1.2_08, примерно в 2008 году), практически каждая сборка поставлялась с (существенными) улучшениями производительности рядом с обычными (незначительными) исправлениями ошибок.
Единственным серьезным недостатком JSF 1.x (включая 1.2) является отсутствие области действия между запросом и сессией , так называемым разговор сфера.Это вынудило разработчиков беспокоиться о скрытых элементах ввода, ненужных запросах БД и / или злоупотреблении областью сеанса всякий раз, когда кто-то хочет сохранить исходные данные модели в последующем запросе, чтобы успешно обрабатывать проверки, преобразования, изменения модели и вызовы действий в болеесложные веб-приложения.Боль можно смягчить, приняв стороннюю библиотеку, которая сохраняет необходимые данные в последующем запросе, такие как Томагавк MyFaces <t:saveState>
, JBoss Seam область разговора и MyFaces Orchestra инфраструктура диалога.
Другим недостатком для пуристов HTML / CSS является то, что JSF использует двоеточие :
в качестве символа разделителя идентификаторов, чтобы обеспечить уникальность элемента HTML id
в сгенерированном выводе HTML, особенно когдакомпонент повторно используется в представлении более одного раза (шаблоны, итерации компонентов и т. д.).Поскольку это недопустимый символ в идентификаторах CSS, вам нужно будет использовать \
для экранирования двоеточия в селекторах CSS, что приведет к появлению уродливых и странно выглядящих селекторов, таких как #formId\:fieldId {}
или даже #formId\3A fieldId {}
.См. Также Как использовать сгенерированный JSF идентификатор элемента HTML с двоеточием ":" в селекторах CSS? Однако, если вы не пурист, читайте также По умолчанию JSF генерирует непригодные идентификаторы, которыенесовместим с css частью веб-стандартов .
Кроме того, JSF 1.x не поставлялся с Ajax-средствами из коробки. На самом деле это не технический недостаток, но из-за шумихи над Web 2.0 в этот период он стал функциональным недостатком. Exadel рано представила Ajax4jsf, которая была тщательно разработана в течение многих лет и стала основной частью библиотеки компонентов JBoss RichFaces . Другие библиотеки компонентов были также поставлены со встроенными возможностями Ajax, хорошо известной из которых является ICEfaces .
Примерно на полпути жизни JSF 1.2 была представлена новая технология представления на основе XML: Facelets . Это дало огромные преимущества перед JSP, особенно в области шаблонов.
JSF 2.0 (июнь 2009 г.)
Это был второй крупный релиз с Ajax в качестве модного слова. Было много технических и функциональных изменений. JSP заменена Facelets в качестве технологии представления по умолчанию, а Facelets была расширена за счет возможности создания пользовательских компонентов с использованием чистого XML (так называемые составные компоненты ). См. Также Почему Facelets предпочтительнее, чем JSP, как язык определения представления, начиная с JSF2.0 и далее?
Возможности Ajax были введены во вкусе компонента <f:ajax>
, который очень похож на Ajax4jsf. Аннотации и соглашения об изменении конфигурации были добавлены в kill подробный файл faces-config.xml
в максимально возможной степени. Кроме того, стандартный символ разделителя идентификатора контейнера именования :
стал настраиваемым, поэтому пуристы HTML / CSS могли дышать с облегчением. Все, что вам нужно сделать, это определить его как init-param
в web.xml
с именем javax.faces.SEPARATOR_CHAR
и убедиться, что вы нигде не используете этот символ в идентификаторах клиента, например -
.
И последнее, но не менее важное: была введена новая область действия, view scope. Это устранило еще один существенный недостаток JSF 1.x, как описано выше. Вы просто объявляете bean-компонент @ViewScoped
, чтобы включить область диалога, не теряя при этом все способы сохранения данных в последующих (диалоговых) запросах. Бин @ViewScoped
будет жить до тех пор, пока вы впоследствии отправляете и переходите к одному и тому же представлению (независимо от открытой вкладки / окна браузера!), Синхронно или асинхронно (Ajax). См. Также Разница между областью просмотра и запроса в управляемых компонентах и Как правильно выбрать область действия компонента?
Несмотря на то, что практически все недостатки JSF 1.x были устранены, есть ошибки, специфичные для JSF 2.0, которые могут стать недопустимыми. @ViewScoped
завершается неудачно в обработчиках тегов из-за проблемы с куриным яйцом при частичном сохранении состояния. Это исправлено в JSF 2.2 и перенесено в Mojarra 2.1.18. Также передача пользовательских атрибутов, таких как HTML5 data-xxx
, не поддерживается. Это исправлено в JSF 2.2 с помощью новой функции прохождения элементов / атрибутов. Кроме того, реализация JSF Mojarra имеет свой собственный набор проблем . Относительно многие из них связаны с иногда неинтуитивным поведением <ui:repeat>
, новой реализацией частичного сохранения состояния и плохо реализованной областью флэш-памяти . Большинство из них исправлены в версии Mojarra 2.2.x.
Примерно во время JSF 2.0 было представлено PrimeFaces , основанное на пользовательском интерфейсе jQuery и jQuery. Это стало самой популярной библиотекой компонентов JSF.
JSF 2.2 (май 2013 г.)
С введением JSF 2.2 HTML5 использовался как модное слово, хотя технически это поддерживалось только во всех старых версиях JSF. См. Также Поддержка JavaServer Faces 2.2 и HTML5, почему XHTML все еще используется . Наиболее важной новой функцией JSF 2.2 является поддержка пользовательских атрибутов компонентов, открывая тем самым целый мир возможностей, таких как пользовательские группы бесключевых переключателей .
Помимо ошибок, связанных с реализацией, и некоторых «досадных мелочей», таких как невозможность внедрения EJB в валидатор / преобразователь (уже исправленный в JSF 2.3), в спецификации JSF 2.2 нет серьезных недостатков.
MVC на основе компонентов против MVC на основе запросов
Некоторые могут предпочесть, что основным недостатком JSF является то, что он позволяет очень мало детализированного контроля над сгенерированным HTML / CSS / JS. Это не принадлежит JSF, просто потому, что это основанная на компонентах * инфраструктура MVC, а не основанная на запросе (действии) платформа MVC. Если при рассмотрении фреймворка MVC вашим основным требованием является высокая степень контроля над HTML / CSS / JS, то вы уже должны смотреть не на фреймворк MVC на основе компонентов, а на фреймворк MVC на основе запросов, такой как Spring MVC . Вам нужно только принять во внимание, что вам придется писать все эти шаблоны HTML / CSS / JS самостоятельно. См. Также Разница между запросом MVC и компонентом MVC .
Смотри также: