2011-01-27 5 views
5

Я хочу понять, как JSF хранит представление и восстанавливает представление. Я прочитал, что он создает отдельный идентификатор вида для каждого представления и сохраняет его на сервере. Затем он извлекает. Ниже приведены следующие вопросы:Сохранение ID вида в JSF

  • В каком основании создается и сохраняется идентификатор вида?
  • Создана ли она на основе JSP, объявленной на faces-config.xml?
  • В основном, он создан для каждого JSP-идентификатора одного вида?
  • Как просматривать идентификаторы для передачи ответа? Он передан в параметре запроса?

ответ

8

В каком основании создается и сохраняется идентификатор вида?

Идентификатор вида - это контекстный относительный путь файла вида. Например. /foo.jsp или /foo.xhtml. Реализация ViewHandler отвечает за ее создание и хранение в UIViewRoot.

Он создан на основе JSP, объявленного на faces-config.xml?

Это необязательно должно быть объявлено где-либо в faces-config.xml. Для каждого входящего запроса, он извлекается из запроса URI с помощью базового объекта HttpServletRequest его getPathInfo() или getServletPath() методов, в зависимости от того, сам FacesServlet отображаются с префиксом шаблоном (/faces/*) или суффикс шаблоном (*.jsf) соответственно.

Когда JSF должна перейти к новому зрения в соответствии с <navigation-case> в faces-config.xml, то новый вид идентификатор просто извлекается из него, и новый UIViewRoot создается конце фазы Invoke действий. В противном случае JSF просто возвращается к тому же представлению, что и запрос.

В основном, он создан для каждого JSP-идентификатора одного вида?

Да, каждый вид имеет свой собственный уникальный идентификатор, который в основном является его местоположением в контексте web-приложения.

Как просмотреть идентификаторы для передачи ответа? Он передан в параметре запроса?

Они хранятся в UIViewRoot, который, в свою очередь, доступен только FacesContext#getViewRoot(). Реализация ViewHandler просто вызывает getViewId() во время метода renderView().

Смежные вопросы