динамические richfaces dataTable, ajax4jsf и reRendering - PullRequest
1 голос
/ 11 марта 2010

У меня есть богатая таблица данных, которая определена внутри a4j: outputPanel, и она привязана к компоненту поддержки области сеанса, который создает HtmlDataTable. Сама по себе эта часть моего кода работает нормально, а таблица данных выглядит хорошо.

В другой части страницы есть несколько основных текстовых ссылок, которые я создаю как a4j: commandLinks, и когда по ним щелкают, dataTable должен быть перерисован с новыми данными строк и столбцов. Данные строки обновляются нормально, но данные столбца (текст заголовка, ширина и т. Д.) - нет.

После небольшого разбора кода кажется, что вызов вспомогательного компонента для HtmlDataTable не выполняется во время повторного рендеринга этой таблицы, но он повторяется, если вся страница перезагружается; так что кажется, что это просто часть ajax4jsf / reRendering, которая кусает меня здесь.

Есть ли способ заставить процесс reRender аннулировать структуру dataTable, чтобы он снова вызывал для нее компонент поддержки?

Если это что-то значит, я тоже использую Seam; поэтому, если есть решение, которое можно найти с его помощью, это тоже будет полезно.

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Ради потомства я нашел решение: всякий раз, когда мой bean-компонент-слушатель выполняет запрос a4j, он заставляет bean-компонент dataTable-building очищать свою таблицу. Этот компонент затем выполняет простой myDataTable.getParent (). GetChildren (). Remove (myDataTable). Эта страница помогла мне разобраться: http://www.coderanch.com/t/213312/JSF/java/dynamic-datatable-binding.

0 голосов
/ 11 марта 2010

В вашем действии просто удалите сессионный компонент в ваших контекстах.

Например:

<a:commandLink action="#{someBean.perform}" value="Submit" reRender="myTable"/>

и действие:

@Name("someBean")
public class SomeBean {

  public void perform() {
    //do stuff

    Contexts.removeFromAllContexts("myBean");  
  }
}

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

...