#jsf-2
#jsf-2
Вопрос:
Мы используем JSF2 и Tomcat6. Нам нужно инициализировать сессионный компонент с исходными значениями, прежде чем пользователь получит доступ к первой странице. Могу ли я узнать, как это сделать?
Комментарии:
1. можете ли вы рассказать мне больше о том, чего вы пытаетесь достичь? Компонент с привязкой к сеансу создается для нового сеанса пользователя, поэтому он не будет существовать до того, как ваш пользователь начнет сеанс, но у вас может быть компонент с привязкой к приложению или другой класс, к которому ваш компонент с привязкой к сеансу может получить доступ. Это, конечно, зависит от того, что вам нужно инициализировать.
2. Мы хотели бы инициализировать сессионный компонент значениями свойств, общими для всех страниц. Чтобы пользователь мог сначала загрузить любую страницу, этот сессионный компонент должен быть инициализирован, чтобы быть доступным.
3. если свойства, которые вы хотите инициализировать, являются глобальными для всех страниц и пользователей, можете ли вы просто использовать компонент ApplicationScoped вместо SessionScoped?
4. Также, если вам просто нужен доступ к компоненту при просмотре первой страницы пользователя, компонент с привязкой к сеансу работает нормально. Вы можете просто инициализировать свойства в конструкторе, и эти свойства будут доступны для первого просмотра страницы.
Ответ №1:
Если вы просто хотите получить доступ к общим данным в области сеанса со страницы, вы могли бы
- напишите сессионный компонент только для этих данных
- используйте этот сеансовый компонент на всех страницах, которым требуется доступ к этим данным; странице не обязательно использовать только один компонент, вы можете использовать некоторый компонент для большинства данных, специфичных для страницы, и один для общих данных
- используйте этот сеансовый компонент в качестве «управляемого свойства» (аннотация @ManagedProperty в jsf2) во всех компонентах, которым требуется доступ к этим общим данным
Ответ №2:
То, что вы просите, строго говоря, невозможно. Сеанс создается ровно после того, как пользователь выполняет свой первый запрос. Как правило, вы можете не создавать сеансы заранее для пользователей, которые никогда не запрашивали какую-либо страницу на вашем сервере.
Любой компонент в области сеанса, на который ссылается страница, будет инициализирован во время первого вызова этой страницы, и только во время этого первого вызова. Это лучшее, что вы можете получить.
(Если вы на самом деле имеете в виду SessionBean, а не управляемый компонент с сессионной областью, то все немного иначе. Поскольку вы не использовали тег EJB в своем вопросе, я полагаю, что это последнее.)