Обновление фрагмента в Spring Web Flow и Primefaces
Использование атрибута <render fragments=» «> в Spring Web Flow и Primefaces. Частичное Ajax обновление компонента без полного обновления страницы.
Технологии
Spring Web Flow 2.4.1
PrimeFaces 5.2.RC1
1. Задача
Требуется обновить компонент после выполнения transition on=’ ‘ без перезагрузки всей страницы. Приведу пример обновления таблицы primefaces p:dataTable после удаления из нее строки.
2. Представление someView.xhtml
1 2 3 4 5 6 7 8 9 10 11 |
<p:fragment> <p:dataTable id="someViewTableId" var="goods" widgetVar="someViewTableId" value="#{someViewBean.someList}" selectionMode="single" rowKey="#{item.uid}#{item.name}" selection="#{someViewBean.selectedItem}" editable="true" paginator="true" rowIndexVar="rowIndex" rowsPerPageTemplate="10,15,30,45" styleClass="tablePaginator" > </p:dataTable> </p:fragment> |
Таблица, которую требуется обновить, заключена в тег <p:fragment>. В целом, указывать дополнительные атрибуты в теге необязательно. Теперь после нажатия на кнопку «удалить строку» значения в таблицы должны обновиться.
1 2 3 |
<p:commandButton value=" " action="removeItem" title="title" styleClass="toolbarButtons" style="background-image: url('/resources/images/remove.png') !important;"/> |
у кнопки задан только action=»removeItem». Заметьте, что никакого update=»:someFormId:someTableId» нет.
3. Файл описания потока flow.xml
1 2 3 4 5 6 |
<view-state id="someView" view="../views/documentsView/someView.xhtml"> <transition on="removeItem"> <evaluate expression="someBean.removeItem()"/> <render fragments="someViewFormId:someViewTableId"/> </transition> </view-state> |
После нажатия на кнопку removeItem здесь указано, что необходимо обновить фрагмент с идентификатором someViewFormId:someViewTableId (в бине тем временем будет удалена одна строчка из таблицы someList.remove(Object o)). Обновится только таблица, но вся страница не будет перезагружена.
2