Статьи

ICEFaces 2.0 и JSF 2.0 вместе

Фреймворки JSF Ajax существуют уже некоторое время. JSF — это все о серверных компонентах, которые отображают свое состояние как разметку для клиента. JSF имеет четко определенный жизненный цикл, который определяет, как состояние компонента обрабатывается на сервере и когда состояние компонента отображается клиенту. Платформы JSF Ajax могут управлять тем, какие компоненты обрабатываются на сервере (это называется частичной обработкой), а какие компоненты возвращают себя клиенту (это называется частичным отображением), отправляя запросы Ajax со специальными параметрами. 

Как ICEFaces использует JSF 2.0 для отправки запросов Ajax

JSF 2.0 Ajax JavaScript API jsf.ajax.request можно использовать для запуска запросов Ajax из события HTML, такого как onclick, Эту функцию также можно вызывать из функции JavaScript. ICEFaces использует функцию jsf.ajax.request в своей библиотеке JavaScript:
 

    submitEvent = function(event, element, form) {
...
jsf.ajax.request(element, event, {execute: '@all', render: '@all'});
...
};

submitForm = function(event, form) {
...
jsf.ajax.request(form, event, {execute: '@all', render: '@all'});
...
};

 

ICEFaces использует submitEvent и submitForm в своих функциях iceSubmitPartial и iceSubmit соответственно. Функции iceSubmitPartial и iceSubmit являются частью Ajax Bridge ICEFaces, который связывается с сервером. ICEFaces использует ключевое слово @all для выполнения и рендеринга.Это означает, что все компоненты обрабатываются на сервере, и все компоненты предназначены для визуализации разметки обратно клиенту. ICEFaces отправляет все, потому что на сервере платформа определяет «грязные» области в представлении, сравнивая текущее отображаемое представление с представлением, которое было отображено в результате запроса Ajax.

Как ICEFaces использует JSF 2.0 для обработки запросов Ajax на сервере

JSF 2.0 предоставляет точки расширяемости, которые позволяют каркасам JSF Ajax выполнять настраиваемую частичную обработку и частичную визуализацию на сервере. Для этой цели API JSF 2.0 предоставляет метод javax.faces.context.PartialViewContext.processPartial . Этот метод выполняет частичную обработку и частичную визуализацию компонентов, идентифицированных идентификаторами ввыполнить и визуализировать списки из запроса. ICEFaces расширяет javax.faces.context.PartialViewContext с их имплементацией DOMPartialViewContext:

 

import javax.faces.context.PartialViewContextWrapper;
...
public class DOMPartialViewContext extends PartialViewContextWrapper {
...
public void processPartial(PhaseId phaseId) {
...
if (isRenderAll() && PhaseId.RENDER_RESPONSE) {
// Perform DOM Diffing ..
// Send updates as separate <update> elements using JSF 2.0 PartialResponseWriter
...
} else {
super.processPartial(phaseId);
}
}
...
}

 

Если текущая фаза обработки — это
фаза ответа рендеринга , ICEFaces:

  • извлекает текущий DOM (для представления перед рендерингом)
  • генерирует новый DOM путем рендеринга нового представления (используя специальный DOMResponseWriter)
  • определяет, есть ли различия между DOM

 

Если есть различия, то реализация JSF 2.0 javax.faces.context.PartialResponseWriter используется для записи элементов <update> обратно клиенту в соответствии с определенным в спецификации форматом частичного ответа:

<partial-response>
<changes>
<update id="user">
...
</update>
<update id="password">
...
</update>
...
</changes>
</partial-response>

Если различий нет, то реализация JSF 2.0
javax.faces.context.PartialResponseWriter используется для записи одного элемента <update>, содержащего всю разметку представления.
Резюме



ICEFaces 2.0 все еще находится в стадии разработки, и это одна из ранних компонентных сред, которые следуют стандарту JSF 2.0 Ajax. Он использует JSF 2.0 Ajax JavaScript API для инициирования запросов Ajax к серверу. Он использует точки расширения JSF 2.0 Ajax на сервере для обработки запросов Ajax и формулирует частичный ответ для отправки клиенту. Эта версия ICEFaces (2.0) в настоящее время использует
реализацию
mojarra  спецификации JSF 2.0. Несомненно, в JSF 2.0 будет больше платформ для компонентов, что должно иметь большое значение для взаимодействия компонентов.

Ссылки

ICEFaces 2.0

JavaServer Faces 2.0 Спецификация

Проект Mojarra

GlassFish