JSF - еще один вопрос по жизненному циклу - PullRequest
1 голос
/ 01 декабря 2010

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

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

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

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 01 декабря 2010

Этап 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 °, не будет выполнен? Или где это терпит неудачу?

На втором этапе в основном также произойдет следующее (здесь 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: ответ на визуализацию - На этом этапе дерево компонентов будет отображаться для клиента.

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

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

facesContext.getViewRoot().encodeAll();
2 голосов
/ 01 декабря 2010

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

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

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

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

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

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

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

0 голосов
/ 27 января 2015

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

...