Компоненты области сеанса JSF с просмотром с вкладками

У нас следующая проблема...

Среда приложения:

JSF, Richfaces, a4J

Рассмотрите следующий сценарий:

  • Пользователь входит в систему
  • Пользователь переходит на новую страницу, которая состоит из формы a4j, содержащей компоненты a4j, пользователь заполняет форму, но не отправляет ее.
  • Пользователь открывает новую вкладку, открывает тот же URL-адрес и заполняет новую форму новыми данными.
  • Пользователь возвращается на свою первую вкладку и отправляет информацию (Примечание: все bean-компоненты определяются в рамках сеанса)

Результат:

Представленная информация — это информация из второй вкладки, но отправленная из первой вкладки, что ожидается, если bean-компоненты определены как область сеанса.

Проблема:

Нам нужно получить поведение области запроса (т. Е. Обработка новой вкладки как нового запроса, хотя bean-компонент определен как область сеанса).

Примечания:

При определении области компонента в качестве области запроса частичный ответ Ajax от отдельных компонентов в той же форме сбрасывает другие компоненты, поскольку они еще не отправлены.

Какие-либо предложения ?

--

Большое спасибо


person Ahmed Mounir    schedule 03.02.2009    source источник


Ответы (2)


Это хорошо известная проблема веб-приложений.

Конечно, вы можете попытаться решить эту проблему, используя более настраиваемый код, но я предлагаю использовать seam framework. который решает именно это.

Seam является расширенным набором JSF и представляет новый conversation scope для bean-компонентов, который делает именно то, что вам нужно.

Seam нативно поддерживает richfaces (оба являются проектами JBoss/Redhat), так что проблем с интеграцией ожидать не стоит.

person kazanaki    schedule 03.02.2009

По какой причине компонент должен находиться в области сеанса?

Если это только для получения функциональности ajax, вы можете изменить bean-компонент на запрос и использовать a4j:keepAlive.

a4j:keepAlive продлевает жизненный цикл для bean-компонента области запроса, затем ваш экземпляр bean-компонента действует так, как будто он находится в области сеанса для запросов ajax. Когда пользователь открывает две одинаковые страницы, он использует два разных экземпляра компонента.

person Mark    schedule 05.02.2009