Seam + RichFaces fileUpload должен спровоцировать рендера - PullRequest
0 голосов
/ 28 декабря 2011

Я использую RichFaces 3.3 и Seam 2 для разработки веб-приложения.

У меня есть страница со следующим:

<h:form>
<s:div id="myPanel">
  <h:messages/>
  <rich:fileUpload fileUploadListener="#{service.uploadEvent}" maxFilesQuantity="1">
    <a:support event="onuploadcomplete" reRender="myPanel"/>
  </rich:fileUpload>
</s:div>
</h:form>

В методе service.uploadEvent я получаю файл и добавляю FacesMessage, чтобы пользователь знал, что файл успешно загружен.

Что на самом деле происходит так:

  1. Браузер запрашивает страницу
    • Сервер начинает временный разговор # 1
    • Сервер отображает страницу
    • Сервер отправляет завершенную страницу и убивает разговор # 1
  2. Клиент запускает вызов AJAX fileUpload
    • Сервер начинает временный разговор # 2
    • Сервер вызывает service.fileUpload(). Этот метод добавляет FacesMessage к компоненту FacesMessages шва в области беседы.
    • Сервер возвращает ответ на запрос AJAX и завершает разговор № 2, включая все FacesMessage s в очереди.
  3. Событие 'onuploadcomplete' получено, клиент запрашивает повторное отображение myPanel.
    • Сервер начинает временную беседу # 3
    • Сервер отображает страницу, создает новый пустой FacesMessages для разговора # 3
    • Сервер возвращает ответ на запрос AJAX (который содержит пустой <h:messages/>) и завершает разговор # 3

Я могу решить эту проблему несколькими способами:

  1. Путем создания нового компонента FacesMessages с областью PAGE.
  2. Отметив разговор как длительный в service.fileUpload() и завершив его после выполнения fileUploadComplete().

Надлежащим способом будет повторное отображение страницы в том же разговоре, что и service.fileUpload() Это возможно?

Ответы [ 2 ]

0 голосов
/ 09 января 2012

Вы пытались заменить <h:messages /> на <rich:messages />?Это хорошо работает, когда действия AJAX создают новые FacesMessages.Смотри http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/rich_messages.html

0 голосов
/ 06 января 2012

Эту проблему можно решить только с помощью пользовательского компонента StatusMessages и выделения его в контекст, который все еще будет доступен при повторном рендеринге (например, PAGE или longrunning CONVERSATION).

...