2 ответов:
введение
он представляет область (время жизни) Боба. Это легче понять, если вы знакомы с работой" под крышками " основного веб-приложения сервлета:как работают сервлеты? Создание экземпляров, сеансы, общие переменные и многопоточность.
@Request/View/Flow/Session/ApplicationScopedA
@RequestScopedbean живет до тех пор, пока один цикл HTTP-запроса-ответа (обратите внимание, что запрос Ajax считается один HTTP-запрос тоже). А@ViewScopedbean живет до тех пор, пока вы взаимодействуете с одним и тем же представлением JSF с помощью обратных связей, которые вызывают методы действия, возвращающиеnull/voidбез какой-либо навигации/перенаправления. А@FlowScopedbean живет до тех пор, пока вы перемещаетесь по указанной коллекции представлений, зарегистрированных в файле конфигурации потока. А@SessionScopedbean живет до тех пор, пока установлен сеанс HTTP. Ан@ApplicationScopedБоб живет в пока работает веб-приложение. Обратите внимание, что CDI@Modelв основном стереотип на@Named @RequestScoped, так же правила применяются.выбор области действия зависит исключительно от данных (состояния), которые содержит и представляет компонент. Используйте
@RequestScopedдля простых и не-ajax форм / презентаций. Используйте@ViewScopedдля расширенных динамических представлений с поддержкой ajax (ajaxbased validation, rendering, dialogs и т. д.). Используйте@FlowScopedдля шаблона" мастер "("анкета") сбора входных данных распространение на нескольких страницах. Используйте@SessionScopedдля конкретных данных клиента, таких как вошедший в систему пользователь и пользовательские настройки (язык и т. д.). Используйте@ApplicationScopedдля общих данных/констант приложения, таких как выпадающие списки, которые одинаковы для всех, или управляемые компоненты без каких-либо переменных экземпляра и имеющие только методы.злоупотребляя
@ApplicationScopedbean для данных с областью сеанса/просмотра/запроса сделал бы его общим для всех пользователей, поэтому любой другой может видеть данные друг друга, что просто неправильно. Злоупотребление@SessionScopedbean for view / request scoped data сделает его общим для всех вкладок / окон в одном сеансе браузера, поэтому конечный пользователь может испытывать несоответствия при взаимодействии с каждым представлением после переключения между вкладками, что плохо сказывается на работе пользователя. Злоупотребление@RequestScopedbean для данных с областью видимости сделает данные с областью видимости повторно инициализированными по умолчанию для каждой обратной передачи (ajax), что может привести к нерабочим формам (см. также пункты 4 и 5 здесь). Злоупотребление@ViewScopedбоб для запроса, сессии или приложения уровня данных, а также злоупотребление@SessionScopedbean для данных области применения не влияет на клиента, но он излишне занимает память сервера и просто неэффективен.обратите внимание, что область действия не следует выбирать на основе значений производительности, если вы действительно имеют низкий объем памяти и хотят идти полностью без гражданства; вам нужно будет использовать исключительно
@RequestScopedбобы и скрипка с запросом параметры для поддержания состояния клиента. Также обратите внимание, что если у вас есть одна страница JSF с разными областями данных, то вполне допустимо поместить их в отдельные резервные компоненты в области, соответствующей области данных. Бобы могут просто получить доступ друг к другу через@ManagedPropertyв случае JSF управляемых бобов или@Injectв случае управляемых CDI бобов.Читайте также:
- разница между представлением и областью запроса в управляемом бобы
- преимущества использования JSF Faces Flow вместо обычной навигационной системы
- связь в jsf2-управляемых областях bean
@CustomScoped/NoneScoped/Dependentэто не упоминается в вашем вопросе, но (наследие) JSF также поддерживает
@CustomScopedи@NoneScoped, которые редко используются в реальном мире. Элемент@CustomScopedдолжен ссылаться на пользовательскийMap<K, Bean>реализация в какой-то более широкой области, которая переопределилаMap#put()и/илиMap#get()чтобы иметь более мелкозернистый контроль над созданием и/или уничтожением бобов.JSF
@NoneScopedи CDI@Dependentв основном живет до тех пор, как одна EL-оценка на бобе. Представьте себе форму входа в систему с двумя полями ввода, ссылающимися на свойство bean и командную кнопку, ссылающуюся на действие bean, таким образом, в общей сложности три выражения EL, тогда будут созданы три экземпляра. Один с установленным именем пользователя, один с установленным паролем и один, на котором вызывается действие. Обычно вы хотите использовать эту область только для бобов, которые должны жить до тех пор, пока Боб, где он вводится. Таким образом, если@NoneScopedили@Dependentвводят в@SessionScoped, то он будет жить до тех пор, пока@SessionScopedбобовые.Читайте также:
- истекает определенный управляемый экземпляр bean после интервала времени
- что такое none scope bean и когда его использовать?
- какова область управляемого компонента по умолчанию в приложении JSF 2?
Flash scope
как последний, JSF также поддерживает область flash. Он поддерживается коротким живым файлом cookie, который связан с записью данных в области сеанса. Перед перенаправлением в HTTP-ответе будет установлен файл cookie со значением, которое однозначно связано с записью данных в области сеанса. После перенаправление, наличие файла cookie flash scope будет проверено, и запись данных, связанная с файлом cookie, будет удалена из области сеанса и помещена в область запроса перенаправленного запроса. Наконец, файл cookie будет удален из ответа HTTP. Таким образом, перенаправленный запрос имеет доступ к данным области запроса, которые были подготовлены в первоначальном запросе.
это на самом деле не доступно в качестве управляемой области bean, т. е. нет такой вещи, как
@FlashScoped. Область вспышки доступна только в виде карты черезExternalContext#getFlash()в управляемых бобах и#{flash}в ЭЛ.Читайте также:
по состоянию на JSF 2.x есть 4 области бобов:
- @SessionScoped
- @RequestScoped
- @ApplicationScoped
- @ViewScoped
Область Действия Сеанса: область сеанса сохраняется с момента создания сеанса до его завершения. Сеанс завершается если веб-приложение вызывает метод invalidate на Объект HttpSession, или если он раз из.
RequestScope: объем запроса недолговечен. Он начинается при отправке HTTP-запроса и заканчивается после отправки ответа обратно к клиенту. Если вы поместите управляемый компонент в область запроса, новый экземпляр создается с каждым запросом. Стоит рассмотреть запрос область, если вас беспокоит стоимость хранения области сеанса.
ApplicationScope: область применения сохраняется для всего продолжительность работы веб-приложения. Эта область является общей для всех запросы и все сессии. Вы помещаете управляемые бобы в область применения если один компонент должен быть общим для всех экземпляров веб-приложения. Боб строится, когда он есть сначала запрашивается любым пользователем приложения, и он остается в живых пока веб-приложение не будет удалено с сервера приложений.
ViewScope: область просмотра была добавлена в JSF 2.0. Боб в поле зрения область сохраняется при повторном отображении той же страницы JSF. (The JSF спецификация использует термин представление для страницы JSF.) Как только пользователь переходит на другую страницу, Боб выходит из области видимости.
выберите объем вы основали на вашем требовании.
источник:Core Java Server Faces 3rd Edition David Geary & Cay Horstmann [страница № 51-54]

Comments