Очистить сеанс JSF перед переходом к новому портлету

#jsf #portlet

#jsf #портлет

Вопрос:

В нашем приложении у нас есть портлет, определенный для каждой из пользовательских вкладок.

  • Мы используем портлеты JSF 1.2 .
  • Я хочу очистить сеансовые компоненты FacesContext, управляемые сеансом, когда пользователь переходит с одной вкладки на другую.

Каков наилучший способ добиться этого?

  • Доступна ли какая-либо функция выгрузки портлета, где мы можем написать код для удаления управляемых сеансом компонентов, прежде чем пользователь покинет вкладку (портлет).

Комментарии:

1. Вы уверены, что ваши управляемые компоненты должны быть @SessionScoped? В вашем сценарии кажется, что область просмотра или диалога подойдет намного лучше.

2. мы используем JSF 1.2, поэтому я не смогу использовать область просмотра, спасибо

3. Доступен ли вам CDI? Если это так, у него есть область диалога.

Ответ №1:

Поскольку вы используете JSF 1.2 и, следовательно, не можете воспользоваться преимуществами новой области просмотра, которая предназначена именно для этой цели, лучше всего использовать MyFaces Tomahawk или MyFaces Orchestra. Вам нужно только поместить ваши компоненты с областью «просмотра» обратно из области сеанса в область запроса.

Если вы хотите смоделировать новую область представления JSF 2.0, то есть компонент будет существовать до тех пор, пока вы взаимодействуете с тем же представлением, тогда вам нужно добавить Tomahawk <t:saveState> в представление, ссылающееся на компонент с областью запроса.

 <h:form>
    <h:inputText value="#{bean.input}" />
    <h:commandButton value="Submit" action="#{bean.submit}" />
    <t:saveState value="#{bean}" />
</h:form>
  

Если вы хотите смоделировать новую область диалога CDI, которая может охватывать несколько представлений на одной вкладке браузера, вам потребуется интегрировать Orchestra.