Ответ 1
Внимательно посмотрите в своих javadocs, чтобы узнать, какие методы они предлагают и что именно делают эти методы.
Если вы посмотрите на те методы, перечисленные в javadoc, вы заметите, что FacesContext
обычно предлагает доступ к специфическим для JSF артефактам, которые никоим образом не связаны с "базовым" сервлетом или API портлета, для которого JSF предназначен для работы поверх. Например. создание преобразователей, валидаторов, компонентов, выражений EL и т.д. и получение информации о корне пользователя, поддерживаемых локалях и т.д., а также добавление фазовых прослушивателей, прослушивателей системных событий и т.д. Все, что характерно для JSF API.
И ExternalContext
обычно предлагает доступ к артефактам, специфичным для сервлета или портлета, которые JSF использует в настоящее время под обложками. Например, при работе в контейнере Servlet HTTP-запрос сервлета, HTTP-сервлет ответ, сеанс HTTP и контекст сервлета и по сути, и все их артефакты. Щелкните эти ссылки, вы увидите, что они, в свою очередь, предлагают методы, которые также делегируются ExternalContext
, например getRequestParameterMap()
. См. Также javadoc. Да, также нажмите эту ссылку, вы увидите, что он явно упоминает запрос сервлета:
Servlet: Это должен быть набор параметров, доступных с помощью методов
javax.servlet.ServletRequest
getParameter()
иgetParameterNames()
.
Нет ничего, что может быть предложено контекстами и. Поэтому совершенно не было бы оснований предпочитать тот или иной. Просто используйте правильную для работы, которую вам нужно выполнить.
Что касается идентификатора клиента, он действительно генерируется JSF, но определенно не при запуске сервера. Он генерируется только для каждого компонента JSF для каждого представления. В случае входных компонентов, таких как <h:inputText>
, который генерирует элемент HTML <input>
, он также становится атрибутом name
, таким как
<input type="text" id="formId:inputId" name="formId:inputId" ... />
formId:inputId
- это именно идентификатор клиента JSF. Он становится именем параметра запроса. HTML-представление кнопки команды также имеет name
, который заканчивается как имя параметра запроса с значением кнопки в качестве значения параметра.