Область разговора в обработчике ресурсов в JSF? - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть обработчик ресурсов, которому нужен доступ к bean-компонентам более низкого уровня, работающим в области диалога. Наше приложение допускает несколько сеансов входа в систему на разных вкладках браузера, работающих в одном и том же сеансе браузера, сохраняя данные входа в систему в этой области, поэтому для доступа к базе данных (мой обработчик ресурсов) требуется логин для беседы, на которую он ссылался.

Я пытался просто ожидать, что это сработает, даже используя ExternalContext.encodeRedirectUrl (), чтобы заставить Faces включать все, что ему нужно.

Я пытался явно указать параметр? Cid в моем пути запроса, поэтому я получаю доступ к

/myapp/javax.faces.resource/thumbnail_3963075518712822225212162218.png.xhtml?ln=com.myapp.attachment&cid=1

В обработчике ресурсов не отображается диалог.

Далее, если я попытаюсь проверить это с помощью Conversation.isTransient (), я получу

javax.enterprise.context.ContextNotActiveException: Conversation Context not active when method called on conversation Transient conversation

(Тем не менее я думал, что разговор всегда должен быть активным, и трассировка стека для вышеупомянутого включает , включая org.jboss.weld.servlet.ConversationPropagationFilter!

Я надеюсь, что это не связано с ошибкой https://issues.jboss.org/browse/JBSEAM-3689, для которой обходной путь "Не используйте разговоры!"

Там лучше?

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

Ответы [ 4 ]

1 голос
/ 23 ноября 2011

Взгляните на Лицевые швы и посмотрите, сможете ли вы заставить вещи работать так, как вы хотите. JSF почти не имеет совместимости с CDI в спецификациях JSF 2.0 и 2.1. Мы усердно работаем над тем, чтобы сделать JSF лучше для JSF 2.2, извините за неудобства.

0 голосов
/ 22 декабря 2012

Посмотрите на Apache Myfaces CODI ,

Управление беседами превосходно с их расширениями

0 голосов
/ 24 ноября 2011

Я сделал то, что, возможно, предложено в отчете об ошибке. Я нашел способ решения проблемы, не используя Conversation Scope. В моем случае у меня есть ThreadLocal, который, если он присутствует, предоставляет альтернативную информацию для компонента, который обращается к данным области разговора.

0 голосов
/ 22 ноября 2011

Безумная идея - написать страницу XHTML с обработчиком событий Restore View, который вручную отображает ресурс и вызывает Complete () для FacesContext. Тьфу! Но страницы XHTML получают разговоры.

...