JSF - еще один вопрос по жизненному циклу

Сегодня я хотел бы узнать некоторые особенности жизненного цикла JSF. Позвольте мне начать:

1 - Этап 2: Применить значения запроса - На этом этапе каждый компонент в представлении будет искать свои значения в запросе и устанавливать для них новые значения

Хм, хорошо, хорошо. Таким образом, представление будет построено из-за предыдущих параметров Beans. После этого есть частичное представление, сгенерированное со значениями запроса. (Верно? Позже, в фазе 3° они будут сравниваться) . Но, например, если значения в списке запросов отсутствуют при создании этого последнего представления? Значения будут нулевыми?

2 - Фаза 5: Вызов приложения - После того, как все значения запроса были успешно установлены для компонента поддержки, будут обработаны события действия, поставленные в очередь на этапе применения значений запроса. В нашем случае метод действия кнопки отправки.

Это не совсем понятно. На данный момент у меня есть (на бобах) значения, обновленные с предыдущего этапа (если проверка и запрос на применение не провалились) . Хорошо, теперь что происходит? Что означает, что события действия, поставленные в очередь на этапе применения значений запроса, будут обрабатываться? Это означает, что, например, если действие Отправить, процесс завершен? Вот почему вызов ajax, если он не будет обработан в фазе 2°, потерпит неудачу? Или где это не получается?

3 - Этап 6. Ответ на визуализацию - На этом этапе дерево компонентов будет отображаться клиенту.

Это означает, что представление на сервере обновляется с использованием обновленных значений компонента? И, после этого, HTML-код создается из этого представления? Или просто сделал HTML код и сохрани статус просмотра?

Надеюсь, вы можете помочь мне:)

3 ответа

Решение

Этап 2. Применить значения запроса. На этом этапе каждый компонент в представлении будет искать свои значения в запросе и устанавливать для них новые значения.

Хм, хорошо, хорошо. Таким образом, представление будет построено из-за предыдущих параметров Beans. После этого есть частичное представление, сгенерированное со значениями запроса. (Верно? Позже, в фазе 3° они будут сравниваться) . Но, например, если значения в списке запросов отсутствуют при создании этого последнего представления? Значения будут нулевыми?

В основном следующее происходит под одеялом (здесь input является UIInput а также request является HttpServletRequest):

if (input.isRendered()) {
    String value = request.getParameter(input.getClientId());
    if (value != null) {
        input.setSubmittedValue(value);
    }
}

Таким образом, они не будут затронуты, если нет параметра запроса. Они не будут установлены с null и просто сохранил дефолт.


Этап 5. Вызов приложения. После того, как все значения запроса успешно заданы для компонента поддержки, будут обработаны события действия, поставленные в очередь на этапе применения значений запроса. В нашем случае метод действия кнопки отправки.

Это не совсем понятно. На данный момент у меня есть (на бобах) значения, обновленные с предыдущего этапа (если проверка и запрос на применение не провалились) . Хорошо, теперь что происходит? Что означает, что события действия, поставленные в очередь на этапе применения значений запроса, будут обрабатываться? Это означает, что, например, если действие Отправить, процесс завершен? Вот почему вызов ajax, если он не будет обработан в фазе 2°, потерпит неудачу? Или где это не получается?

Во время 2-го этапа в основном также произойдет следующее (здесь command является UICommand, request является HttpServletRequest а также ActionEvent является ActionEvent):

if (command.isRendered()) {
    String value = request.getParameter(command.getClientId());
    if (value != null) {
        command.queueEvent(new ActionEvent(command)); // Queue for INVOKE_ACTION.
    }
}

Затем на этапе вызова приложения будут вызваны все события, которые поставлены в очередь для конкретной фазы.


Этап 6: ответ на визуализацию. На этом этапе дерево компонентов будет отображаться для клиента.

Это означает, что представление на сервере обновляется с использованием обновленных значений компонента? И, после этого, HTML-код создается из этого представления? Или просто сделал HTML код и сохрани статус просмотра?

На этом этапе JSF проходит по дереву компонентов, и все компоненты будут закодированы (вызовет Renderer из всех компонентов, по умолчанию HTML рендерер) . Во время кодирования значения будут просто получены из модели. Сам вид не будет обновлен. В основном:

facesContext.getViewRoot().encodeAll();

1 - Этап 2. Применить значения запроса

Эта фаза не имеет ничего общего с поддерживающим компонентом. Здесь мы просто обрабатываем параметры запроса и пытаемся "связать их" с компонентом в представлении. На этапе Apply Request эти параметры HTTP-запроса должны быть преобразованы и проверены, прежде чем они будут внедрены в реальный компонент.

2 - Этап 5: вызов приложения

В JSF ActionEvents обрабатываются ActionListeners. При нажатии на кнопку ActionEvent поднимается и ставится в очередь для обработки на более позднем этапе. JSF предоставляет Actionlistener по умолчанию, который выбирает этот ActionEvent и обрабатывает его на этапе обработки приложения.

Стандартный ActionListener реализован таким образом, что он оценивает выражение EL и использует результат, чтобы передать его в навигационный прослушиватель. Таким образом, то, что вы принимаете как должное (нажатие кнопки выполняет выражение EL в атрибуте действия и пересылает на другую страницу), фактически обрабатывается внутренне с помощью ActionListener.

3 - Этап 6: Отобразить ответ -

Представление JSF является внутренним представлением дерева компонентов и всех привязок значений. Фактическое представление HTML обрабатывается ViewHandler.

Еще одну замечательную статью о жизненном цикле JSF можно найти по адресу: http://palkonyves.blogspot.com.br/2013/08/demistifying-jsf-21-lifecycle-mojarra.html

Другие вопросы по тегам