Как технологии просмотра JSF переводят на стороне клиента? - PullRequest
2 голосов
/ 31 марта 2012

Итак, я понимаю, что JSP представляют собой смесь клиентского кода (DHTML, JS, CSS и т. Д.) И Java.Таким образом, JSP вроде как чистый PHP или чистый ASP.Когда веб-контейнер получает запрос на JSP, он компилирует Java внутри JSP, выполняет его и затем возвращает полученный клиентский код в ответ HTTP.

Я также понимаю, что альтернативой JSP являютсяСервлеты, или комбинация сервлетов / шаблонов, как FreeMarker.Сервлеты содержат чистую Java (бизнес-логику), а шаблоны содержат логику представления.

Что я не понимаю, так это то, как производные от JSF технологии, такие как RichFaces, PrimeFaces и ICEFaces, превращают код Java в код на стороне клиента,может работать в браузере.Я также слышал, что основным преимуществом этих платформ являются «богатые» элементы управления пользовательским интерфейсом, с которыми они идут, но мне сложно соединить все точки.

Эти платформы компилируются в JS, как GWTделает?Если это так, то я бы предположил, что эти расширенные элементы управления UI будут такими же, как, скажем, элементы управления jQuery UI, которые являются просто чистым JS.

Если это не так, то я просто не понимаю (ввсе) как эти фреймворки превращают код на стороне сервера в «материал», который может выполнять на стороне клиента.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 31 марта 2012

Нет, JSF не похож на GWT.Идея другая.Но давайте начнем с самого начала.

Сервлеты на самом деле не являются альтернативой JSP.JSP - это технология, отвечающая за часть View в шаблоне проектирования Model-View-Controller.Сервлеты обычно играют роль Контроллера.

В типичном сценарии Сервлет получает запрос от пользователя, анализирует его и вызывает бизнес-логику (Модель) - это может быть просто набор классов Java или компонентов EJB или что-то ещекоторый вычисляет что-то, обращается к базе данных и т. д. Затем сервлет получает данные из бизнес-логики (если есть) и перенаправляет пользователя на соответствующий элемент View - JSP, страницу чистого HTML, некоторый механизм шаблонов и т. д.

JSFэто своего рода слой над серверами JSP +, который облегчает жизнь программистам (хотя многие бы сильно с этим согласились :))

Страница JSF - это в основном страница JSP, которая использует набор специализированных тегов - компонентов (JSF).родные теги или теги RichFaces или теги ICE Faces).Эти теги могут быть написаны на Java, могут ограничивать JavaScript, CSS.В конечном итоге эти теги генерируют HTML, представляющий «компонент», например, необычную таблицу с возможностью сортировки.

Таким образом, у вас есть, например, компонент, который вы размещаете на странице JSP, и он представляет собой красиво выглядящую таблицу.

Кроме того, JSF оснащен стандартным контроллером, который не написан на Java, но являетсянабор правил навигации между страницами, написанными на XML.

Еще одним элементом являются JSF Beans, которые привязаны к страницам JSF и автоматически заполняются данными, взятыми с этих страниц.Часто это довольно просто - пользователь заполняет форму, которая является частью страницы JSF (в форме также используются специализированные теги - компоненты).Как только эта форма отправлена, класс JSF Bean заполняется данными, и вызывается метод действия.Метод action возвращает строку, которая используется для идентификации страницы, на которую следует перенаправить пользователя (правило взято из конфигурации контроллера XML).

Так что в случае JSF часть внешнего интерфейса генерируется в бэкэнде - теги JSF(или компоненты, как их называют люди) интерпретируются в бэкэнде, и бэкэнд генерирует из них HTML.

Это можно сравнить с технологиями, которые разделяют интерфейс и бэкэнд.Backend получает и возвращает данные в виде XML или, чаще всего, JSON, и обменивается ими с внешней частью приложения.Внешний интерфейс может быть написан на JavaScript, Flex и т. Д. Таким образом, внутренний интерфейс и внешний интерфейс полностью разделены.

2 голосов
/ 31 марта 2012

Что я не понимаю, так это то, как производные от JSF технологии, такие как RichFaces, PrimeFaces и ICEFaces, превращают код Java в код на стороне клиента, который может выполняться в браузере

HTML генерируется encodeXxx() методами UIComponent и / или Renderer реализаций.Эти методы вызываются во время фазы ответа рендеринга, начиная с UIViewRoot, который делегирует вызов на протяжении всей иерархии дерева компонентов.

Реализации JSF, такие как Mojarra и практически все библиотеки компонентов имеют открытый исходный код.Чтобы взять стандартный компонент JSF <h:inputText> в качестве примера, начните смотреть на класс com.sun.faces.renderkit.html_basic.TextRenderer, чтобы увидеть весь код, генерирующий HTML.


Doэти структуры компилируются в JS, как это делает GWT?

Абсолютно нет.Откройте страницу JSF в браузере, щелкните правой кнопкой мыши и Просмотр источника .Это всего лишь HTML-код, если необходимо, вместе с автоматически включаемыми файлами CSS / JS.С GWT это один и все JS-код.

См. Также:

...