JSF Beartings? CID - правильный беспорядок, когда кто -то закладывает страницу?

StackOverflow https://stackoverflow.com/questions/7817936

  •  26-10-2019
  •  | 
  •  

Вопрос

Работая в JBoss AS7, используя разговорную область для управления взаимодействиями пользователя на вкладке браузера.

Я отмечаю, что мои страницы получают добавленные параметры CID. Это здорово - пока пользователь застрянет на странице, затем попытается вернуться к ней! Фильтр разговора дает сообщение «Нет такого разговора».

Есть ли лучший способ управления разговорами? Возможно, реализация или переключатель, чтобы он использовал скрытые поля (с соответствующей уходом в Ajax)? В качестве альтернативы мне придется начать пытаться перехватить исключение разговора или изменить фильтр!

Спасибо - Ричард

Дальше:

Я перехватываю событие BeforerestoreView для других целей (в основном обработка входа в систему). Вы могли бы подумать, что это сработает:

/**
 * @return true if there is no valid Conversation context.
 */
private boolean conversationNotActive()
{
    Context conversationContext = m_beanManager.getContext(ConversationScoped.class);
    return !conversationContext.isActive();
}

Но я не могу получить контекст, чтобы спросить, если он активен! На данный момент просто бросим.

Это было полезно?

Решение

Теперь мы придерживаемся двух ядровных подходов.

Довольно сложный менеджер разговоров обнаруживает плохой идентификатор разговора и предпринимает соответствующие действия. В настоящее время он отвечает на событие после восстановления. Я хотел бы переместить его раньше, но у меня проблемы с получением идентификатора представления на этом этапе. Я написал JSF для моста CDI, чтобы передать события CDI. Seamfaces сделает то же самое, но оказался слишком тяжелым для нас.

Для нормального привлечения менеджера разговоров перенаправляется на себя без параметра CID, чтобы вызвать новый разговор. Для обратной связи он возвращает ошибку HTTP 410. Обнаружение мертвого разговора, как и выше. Мы могли бы использовать более случайный идентификатор разговора, когда мы создаем разговоры, чтобы попытаться предотвратить столкновение, если идентификатор повторно используется.

Менеджер разговоров также начнет разговор в зависимости от метаданных, которые он придерживается на страницах. (Все страницы под / формы / требуют разговора в нашем приложении). Он использует перенаправление, когда это происходит, чтобы гарантировать, что параметр CID везде, где он должен быть. Это может стать ненужным, если я могу решить проблему получения идентификатора формы до фазы восстановления.

Мы используем API истории браузера для удаления CID из URL -окна пользователя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top