Рубрики
Без рубрики

Управление жизненным циклом страниц JSF

Когда пользователь запрашивает страницу, начинается жизненный цикл JSF. JavaServer faces создает текущее представление из ранее сохраненного состояния, которое на самом деле

Автор оригинала: Pankaj Kumar.

Когда пользователь запрашивает страницу, начинается жизненный цикл JSF. JavaServer faces строит текущее представление из ранее сохраненного состояния, которое фактически является состоянием отправки предыдущей страницы. Платформа выполняет определенные задачи, такие как проверка полей ввода страницы, генерация ответа и так далее.

Жизненный цикл JSF включает в себя шесть этапов, а именно

  1. Фаза восстановления просмотра
  2. Фаза применения значений запроса
  3. Этап проверки процесса
  4. Этап обновления значений модели
  5. Вызов фазы приложения
  6. Фаза ответа на рендеринг

Давайте подробно рассмотрим каждый из этих этапов.

  1. Фаза восстановления представления : Всякий раз, когда поступает запрос, это первая фаза, которая инициируется. Когда поступает запрос, то есть при нажатии кнопки или ссылки, jsf создает представление, подготавливает обработчики событий, проверяет компоненты пользовательского интерфейса и сохраняет представление в контексте faces. Этот текст facescontext будет содержать всю информацию о предыдущем запросе для обработки текущего запроса. Если запрос является начальным, JSF создает пустое представление и отображает его пользователю во время обратной передачи. Если представление обратной передачи уже существует, информация выводится из сохраненного состояния.
  2. Применить значения запроса : После восстановления компонентов на первом этапе каждый компонент извлекает свое новое значение, которое могло быть изменено из предыдущего состояния с помощью метода декодирования. Извлеченное значение затем сохраняется локально(собственный тип данных) вместе с компонентом. Если процесс декодирования завершается неудачно, генерируется сообщение об ошибке, которое сохраняется в контексте faces для дальнейших действий. Если для компонентов на странице для их непосредственных атрибутов JSF установлено значение true, то события, проверка и преобразование, связанные со страницей, будут обработаны. Если какой-либо метод декодирования вызывает фазу отклика рендеринга, то элемент управления перенаправляется на саму фазу отклика рендеринга. Если приложению необходимо перенаправить на другое приложение, оно может вызвать FacesContext.responseComplete. К концу этого этапа будут установлены новые значения, и сообщения, события будут поставлены в очередь.
  3. Этап проверки процесса : На этом этапе все проверки, связанные с полем, обрабатываются и добавляются в дерево компонентов. Каждое правило проверяется и сравнивается со значениями, хранящимися в локальном компоненте. Если значения в локальном компоненте недопустимы, сообщения об ошибках регистрируются в контексте faces, и та же страница снова отображается с сообщением об ошибке, перейдя к этапу ответа на визуализацию.
  4. Этап обновления значений модели : Поскольку проверка данных выполняется на этапе проверки, теперь соответствующие свойства объекта сервера устанавливаются и сохраняются в локальных компонентах. Свойства компонента обновляются до соответствующих атрибутов входного компонента.
  5. Фаза вызова приложения : На этом этапе обрабатываются такие события, как отправка формы, переход по ссылке. Если обработанные представления будут восстановлены на основе информации о состоянии предыдущего запроса и если событие будет запущено, оно будет передано заинтересованным слушателям. Если перенаправление на другое веб-приложение вызывается снова, происходит переход к фазе отрисовки ответа.
  6. Фаза ответа на рендеринг : Сервер Java сначала проверяет, является ли это страницей jsp, и если да, то управление передается контейнеру JSP. Если запрос является начальным, страница сначала добавляется в дерево компонентов и сохраняется. Если это не первоначальный запрос, компонент уже будет сохранен и, следовательно, он просто будет отрисован. В любом случае компоненты будут отображаться по мере того, как контейнер JSP будет проходить по тегам на странице. Если в ходе этого процесса возникнут какие-либо ошибки, отобразятся соответствующие сообщения. После отображения представления содержимое будет сохранено, чтобы при поступлении того же запроса к нему можно было получить доступ, а также оно было доступно для этапа восстановления представления.

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

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

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

Страница || добавить сведения.xhtml || содержит все поля автомобиля, в которые пользователь может ввести данные. Код для страницы добавления сведений выглядит следующим образом.





    
        Facelet Title
    
    
        
            
                Car Id:
                
            

Car Name:

Car color:

Создайте управляемый компонент Car.java как показано ниже.

package com.journaldev.jsf.beans;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class Car {
    private String cname;
    private String Id;
    private String color;
    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getCname() {
                return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }


    public String getId() {
        return Id;
    }

    public void setId(String Id) {
        this.Id = Id;
    }
    
    public void clearAll(){
      this.Id = "";
      this.cname = "";
      this.color="";
  }    
}

Предположим, что пользователь вводит https://localhost:8080/HelloWorld/faces/addDetailsPage.xhtml в браузере. Ниже приведены этапы выполнения.

Шаг 1 : Поскольку это первоначальный запрос, восстанавливать нечего, поэтому создается пустое представление, которое отправляется обратно.

Шаг 2 : Значения, введенные пользователем для сведений об автомобиле, устанавливаются здесь как автомобиль, и.

Шаг 3 : Здесь проверяются проверки, связанные с идентификатором автомобиля, именем и цветом. Поскольку не установлено никаких проверок, обработка здесь не выполняется. Предположим, мы делаем идентификатор автомобиля обязательным и отправляем страницу с идентификатором автомобиля как нулевой, валидатор генерирует сообщения об ошибках и переходит к последнему шагу, который является ответом на рендеринг.

Шаг 4 : На этапе модели значения со страницы извлекаются и вставляются в соответствующие переменные в компоненте car. Метод “Очистить все” отображается, и при необходимости здесь выполняется функция “Очистить все”.

Шаг 5 : Здесь обрабатывается нажатие кнопки сброса. Здесь строится представление, которое будет отображаться. Это результат запуска функции на шаге 4. Например, когда мы очищаем поля, выполняется метод bean и создается новое представление со всеми значениями полей, равными нулю.

Шаг 6 : Отображается страница просмотра страницы добавления сведений.xhtml с конечным результатом и значениями полей. В данном примере это страница со всеми полями, для которых установлены пустые значения.

Это все для управления жизненным циклом страницы JSF, мы рассмотрим больше функций JSF в следующих публикациях.