FacesMessages - компонент шва в области разговора. Предположим, вы используете временные разговоры, вот что происходит:
- Первоначальный запрос к странице JSF. Временный разговор № 1 создан.
- Страница JSF обработана, разговор №1 прерван.
- AJAX-запрос для mediaOutput. Временный разговор № 2 создан.
- Изображение отображается. Объект FacesMessages, связанный с беседой № 2.
- Изображение возвращено. Разговор № 2 убит.
- a4j: outputPanel является ajaxRendered. Временный разговор № 3 создан.
- Пустые сообщения FacesMessages отображаются в диалоге № 3.
Вы можете проверить это, включив #{conversation.id}
в ваши a4j: outputPanels и записав идентификатор разговора в вашем методе paint()
.
Есть два решения этой проблемы. Либо вы начинаете длительный разговор, и добавляете в свой mediaOutput. Другое решение состоит в том, чтобы не использовать FacesMessages, а пользовательский компонент в области PAGE для хранения ваших сообщений.
Вы также можете переключиться на RichFaces4, который включает аргумент «рендеринга» для каждого компонента richfaces, который гарантирует, что повторное рендеринг будет выполнен в том же запросе, что и исходный AJAX-запрос mediaOutput.