JavaServer Faces

JavaServer Faces
Тип каркас вебзастосунків
Автор Sun Microsystems
Розробник Eclipse Foundation[1]
Стабільний випуск 2.3.9 (Mojarra Reference Implementation) (16 листопада 2018; 5 років тому (2018-11-16))
Нестабільний випуск 2.4.0 SNAPSHOT (Mojarra Reference Implementation)
Платформа Java EE
Мова програмування Java
Ліцензія EPL-2.0d і GPL linking exceptiond
Репозиторій github.com/jakartaee/faces
Вебсайт javaserverfaces.dev.java.net

JavaServer Faces (JSF) — це каркас вебзастосунків написаний на Java. Він служить для того, щоб полегшувати розробку користувацьких інтерфейсів для Java EE застосунків. На відміну від більшості MVC фреймворків, які керуються запитами, підхід JSF ґрунтується на використанні компонентів. Стан компонентів користувацького інтерфейсу зберігається, коли користувач запитує нову сторінку й потім відновлюється, якщо запит повторюється. Для відображення даних звичайно використовується JSP, але JSF можна пристосувати й під інші технології, наприклад XUL.

Коротко

Переваги

  • генерація серверної частини інтерфейсу користувача
  • базується на компонентах(ніякого HTML)
  • наявна обробка подій(event) та станів(states)
  • різноманітні view-технології — не тільки HTML та JavaScript
  • розробка з урахуванням доступного інструментарію
  • наявний стандарт і він включений до Java EE
  • рольова модель розробки веб

Недоліки

  • потрібно багато часу для вивчення та освоєння технології
  • потребуються потужні обчислювальні можливості серверу

Детально

Специфікація

Користь технології JSF обумовлена, в першу чергу, наявністю специфікації JSF. Специфікація дозволяє розробляти JSF фреймворки з різним призначенням та різною внутрішньою структурою. Вона лиш гарантує, що фреймворк буде підпорядкований певній структурі. Але з іншого боку специфікація дуже обмежує еталонну реалізацію в освоєнні нових можливостей. Тобто наприклад ajax-технології такі як Ajax4JSF включають дуже багато інтеграційного коду який виникає через потребу в узгодженні еталонної реалізації з основними вимогами специфікації. Можна відмітити, що сама специфікація розроблена досить неоднорідно. Плюсами специфікації є: дерево компонентів, підтримка різних технологій представлення(JSP, Facelets), підтримка різноманітних рендерерів — класів, що відповідають за відображення компоненту, підтримка обробки подій і перевіркою інформації, що вводиться, визначення навігації, а також підтримку інтернаціоналізації (і18n) і доступності (accessibility). Але є й недоліки: дуже великий обсяг коду для реалізації ітераційних компонентів, відсутності обробки повідомлень в середині ітераційного компоненту, великий обсяг шаблонного коду, який можна було б опустити, при реалізації власних компонентів(custom component), непродуманість певних архітектурних рішень в специфікації, щодо реалізації ajax, управління станом дерева компонентів, пошуку по дереву компонентів. Специфікація JSF 1.0 та 1.1 була розроблена завдяки Java Community Process як JSR 127, а JSF 1.2 як JSR 252. Майбутня JSF 2.0 буде розроблена як JSR 314. Сама специфікація не належить до жодної компанії і розроблюється групою експертів з таких відомих компаній як Sun, Oracle, IBM, Novell, Macromedia, BEA Systems, Hewlett-Packard, Siemens AG. Таким чином технологію JSF можна віднести до відкритих стандартів.

Еталонна реалізація

Група експертів підтримує в актуальному стані еталонну реалізацію(reference implementation) JSF. Це дозволяє, як використовувати її в реальних вебзастосунках, так і розвивати інші реалізації конкурентів. Гарними сферами застосування еталонної реалізації JSF є корпоративні вебсайти, та маленькі вебсайти, на зразок вебмагазину. Для великих вебсайтів з великою кількістю компонентів JSF не підійде. Це обумовлено тим що еталонна реалізація має деякі проблеми, що пов'язанні із надлінійним зменшенням швидкодії при збільшенні компонентного дерева. Різні експерти пов'язують це з непродуманістю підсистеми збереження стану та системи зв'язування компонентів.

За специфікацією реалізація JSF повинна підтримувати багато різноманітних точок розширення, що дозволяють змінити поведінку JSF-застосунку. Такими точкам розширення є: 5 етапів циклу обробки запиту(JSF life cycle), навігаційна логіка(navigation handler), абстрактна система інтерпретації виразів(EL) JSF. Також розробнику вебзастосунків дозволяється розробляти свої компоненти, свої рендерери, валідаційні компоненти, компоненти перетворювачі, будувати дерева компонентів програмним шляхом. Це все свідчить на користь того, що JSF являє собою вельми абстрактну платформу для реалізації різноманітних вебзастосунків, але певні перепони із швидкістю заважають використовувати її в великих вебпроектах, що мають певні вимоги по швидкості виконання запитів.

Версії JSF

  • JSF 1.0 (11.03.2004) — первісний реліз по специфікації JSF
  • JSF 1.1 (27.05.2004) — виправлення помилок. Істотних змін немає.
  • JSF 1.2 (11.05.2006) — виправлення в ядрі й API, включено в Java EE 5
  • JSF 2.0 (28.06.2009) — основний реліз (major release), переглянуто специфікації з урахуванням досвіду розробки, розширено функціональність, покращено продуктивність, включено в Java EE 6.
  • JSF 2.1 (22.10.2010) — лише незначні зміни.
  • JSF 2.2 (16.04.2013) — Представлені нові концепції, такі як представлення без стану, потік сторінок і можливість створювати стерпні контракти ресурсів.
  • JSF 2.3 (28.03.2017) — Основні можливості: пошук виразів, URL без розширень, перевірка bean-компонентів для повних класів, push-повідомлення з використанням WebSocket, поліпшена інтеграція з CDI.

Реалізації JSF

  • MyFaces http://myfaces.apache.org/ [Архівовано 28 червня 2009 у Wayback Machine.]
  • Mojarra https://javaserverfaces.github.io/ [Архівовано 28 червня 2019 у Wayback Machine.]
  • Sun JSF Reference Implementation https://web.archive.org/web/20070711152101/https://javaserverfaces.dev.java.net/

Підтримка IDE

Бібліотеки компонентів

  • PrimeFaces http://www.primefaces.org/ [Архівовано 23 вересня 2011 у Wayback Machine.]
  • Tomahawk http://myfaces.apache.org/tomahawk/ [Архівовано 28 травня 2014 у Wayback Machine.]
  • Tobago http://myfaces.apache.org/tobago [Архівовано 25 грудня 2007 у Wayback Machine.]
  • Trinidad http://myfaces.apache.org/trinidad [Архівовано 24 грудня 2014 у Wayback Machine.]
  • ICEfaces http://www.icefaces.org/ [Архівовано 5 липня 2008 у Wayback Machine.]
  • RichFaces http://www.richfaces.org/ [Архівовано 29 вересня 2009 у Wayback Machine.]
  • Netadvantage http://www.infragistics.com/ [Архівовано 24 грудня 2007 у Wayback Machine.]
  • BluePrints https://blueprints.dev.java.net/ajaxcomponents.html[недоступне посилання з лютого 2019]
  • JBossRichFaces http://richfaces.jboss.org/ [Архівовано 1 січня 2015 у Wayback Machine.]
  • ILOG JSF tools https://web.archive.org/web/20071213161127/http://svdemo01.ilog.com/
  • ADF http://www.oracle.com/technetwork/developer-tools/adf/overview/index-092391.html [Архівовано 11 січня 2015 у Wayback Machine.]
  • Backbase http://www.backbase.com/ [Архівовано 26 грудня 2007 у Wayback Machine.]
  • Simplica http://www.simplica.com/ [Архівовано 26 грудня 2007 у Wayback Machine.]

Примітки

  1. https://projects.eclipse.org/projects/ee4j.faces
  2. JavaServer Faces. Архів оригіналу за 16 березня 2015. Процитовано 12 січня 2015.
  3. VisualWebSupport. Архів оригіналу за 24 грудня 2014. Процитовано 12 січня 2015.

Література

  • Jonas Jacobi, John R. Fallows: Pro JSF and Ajax, Apress, ISBN 1-59059-580-7
  • Chris Schalk, Ed Burns, James Holmes: JavaServer Faces: The Complete Reference, McGraw-Hill Osborne Media, ISBN 0-07-226240-0
  • David Geary, Cay Horstmann: Core JavaServer Faces, Second Edition, Prentice-Hall, 2007 ISBN 0-13-173886-0
  • Kito D. Mann: JavaServer Faces in Action, Manning Publications Company, 2005 ISBN 1-932394-12-5
  • Bill Dudney, Jonathan Lehr, Bill Willis, eRoy Mattingly: Mastering JavaServer Faces, John Wiley & Sons, 2004 ISBN 0-471-46207-1
  • Hans Bergsten: JavaServer Faces, O'Reilly & Associates, ISBN 0-596-00539-3
  • Budi Kurniawan, Nancy Maragioglio: JavaServer Faces Programming, McGraw-Hill Osborne Media, ISBN 0-07-222983-7
  • James Turner, Craig McClanahan, Kunal Mittal: JavaServer Faces Kick Start, SAMS, ISBN 0-672-32599-3
  • John Ferguson Smart: JSF Jumpstart — A tutorial introduction to building web sites using JSF, published in electronic form.
  • п
  • о
  • р
Каркаси вебзастосунків (веб-фреймворки)
ASP.NET
ASP.NET MVC Framework · BFC · DotNetNuke · MonoRail · Umbraco
ColdFusion
ColdSpring · Fusebox · Mach-II · Model-Glue · onTap
Common Lisp
ABCL-web · blow · BKNR · SymbolicWeb · UnCommon Web
Erlang
BeepBeep · Chicago Boss · Erlang Web · ErlyWeb · Inets · Misultin · Mochiweb · Nitrogen · WebMachine · Yaws
Flex
Cairngorm
Java
Apache Cocoon · Apache Struts · Apache Tapestry · AppFuse · Aranea framework · Click Framework · Cooee framework · Flexive · Google Web Toolkit · Grails · Hamlets · IT Mill Toolkit · ItsNat · JavaServer Faces · JBoss Seam · Makumba · Mentawai · Oracle ADF · OpenLaszlo · OpenXava · Play Framework · Reasonable Server Faces · Restlet · RIFE · Shale Framework · SmartClient · Spring Framework · Stripes · ThinWire · WebObjects · WebWork · Apache Wicket · XTT Framework · ZK Framework
Клієнтські для JavaScript
ASP.NET AJAX · AJILE · Clean AJAX · Backbone.js · Dojo toolkit · Echo JS · Ext JS · jQuery · KnockoutJS · MochiKit · Meteor · MooTools · OpenLink AJAX Toolkit · Prototype · React · qooxdoo · Rialto Toolkit · Rico · script.aculo.us · SmartClient · Spry framework · WinJS · Underscore.js · Yahoo! UI Library
Perl
Catalyst[en] · Interchange · Maypole framework · Mason · Mojolicious
PHP
Akelos PHP Framework · CakePHP · Chisimba · CodeIgniter · Drupal · DokuWiki · eZ Publish · FUSE · Horde · Joomla! · Kohana · MODX · Phalcon · PHP For Applications · PHPOpenbiz · PRADO · Qcodo · Seagull PHP Framework · Simplicity PHP framework · Laravel · SilverStripe · Symfony · VirtueMart · Zend Framework · Zoop Framework · Yii
Python
CherryPy · Django · Flask · Karrigell · Nevow · Porcupine · Pylons · Spyce · TurboGears · TwistedWeb · web.py · web2py · Webware · Zope
Ruby
Camping · Nitro · IOWA · Ramaze · Cerise · Merb · Ruby on Rails
Scala
Lift · Play Framework · Scalatra
Серверні для JavaScript
AppJet · firecat · Helma Object Publisher · Node.js
Lua
Dart
Інші
Alpha Five · Fusebox (ColdFusion і PHP) · OpenACS (Tcl) · Seaside (Smalltalk) · HAppS (Haskell)·
Програмне забезпечення Це незавершена стаття про програмне забезпечення.
Ви можете допомогти проєкту, виправивши або дописавши її.