Проблема<rich: datatable> и <rich: datascroller>
Я занимаюсь разработкой веб-приложения Seam-Jsfv1.2-EJB3. У меня есть дата и флажки в каждом ряду. Более того, в нижней части таблицы у меня также есть панель данных.
Моя проблема в том, что когда я щелкаю номер следующей страницы в скроллере, выбранные флажки на первой странице таблицы данных исчезают. Я имею в виду, даже если они были выбраны, нажав на следующую страницу, чтобы отменить их выбор. Я вижу это, снова возвращаясь к первой странице, щелкая скроллер.
У вас есть идеи по поводу этой проблемы? Чтобы прояснить мой случай, я приложил мой код ниже:
<rich:dataTable
id="apiV2ProductList" rows="10" var="_apiV2Product"
value="#{apiV2ProductList.resultList}"
rendered="#{not empty apiV2ProductList.resultList}" reRender="ds">
<rich:column>
<f:facet name="header">
<h:selectBooleanCheckbox id="selectionCheckAll" onclick="selectAll()" />
</f:facet>
<h:selectBooleanCheckbox id="selectionCheck" onclick="increase(this)" value="#{_apiV2Product.selectValue}" >
</h:selectBooleanCheckbox>
</rich:column>
...
<f:facet name="footer">
<rich:datascroller id="ds" renderIfSinglePage="false">
</rich:datascroller>
</f:facet>
Спасибо заранее. Барис
4 ответа
Добавление тега поддержки a4j между скроллером решило мою проблему:
<f:facet name="footer">
<rich:datascroller id="ds" renderIfSinglePage="false">
<a4j:support event="onpagechange"/>
</rich:datascroller>
</f:facet>
Однако с другой стороны, я использую JQuery для стилизации моей таблицы (например, при наведении мыши), и на этот раз, когда я нажимаю на следующую страницу моей таблицы, стиль исчезает.
Любая помощь будет отличной, большое спасибо заранее.
** PS: Кстати, самое странное, на мой взгляд, то, что я не могу самостоятельно найти решение для такого рода проблем. Ваше творение не всегда может быть достаточно, чтобы решить (по крайней мере, здесь, в моем примере, добавление a4j:support thing) Я спрашиваю экспертов, как мы можем справиться с такими вещами самостоятельно... **
Вы можете продлить org.richfaces.renderkit.html.DatascrollerTemplate
напишите свой собственный DataScroller для собственного стиля, добавив компонент с приведенной ниже конфигурацией в face-config.xml
<component>
<component-type>exCustHtmlDatascroller</component-type>
<component-lass>org.jsf.common.ui.EXCustHtmlDatascroller</component-class>
</component>
<render-kit>
<renderer>
<component-family>org.richfaces.Datascroller</component-family>
<renderer-type>exCustDataScrollerTemplate</renderer-type>
<renderer- class>org.jsf.common.ui.EXCustDataScrollerTemplate</renderer-class>
</renderer>
</render-kit>
Вам не нужен jQuery для стилизации данных
<rich:dataTable id="dataTable" var="x"
onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
Проблема, с которой вы столкнулись при удалении стилей, связана с природой AJAX и способом перерисовки таблицы.
Предполагая, что вы запускали первоначальный вызов стиля на основе какой-либо формы страницы onLoad, при первой визуализации страницы ваши стили будут применены. Тем не менее, когда вы нажимаете кнопку "Далее" с помощью страницы, вы вытаскиваете много нового HTML-кода и заменяете старый HTML-код в таблице более новой, обновленной информацией. Проблема, с которой вы сталкиваетесь, заключается в том, что вы видели стили, потому что jQuery применял стили к старым узлам, после reRender эти узлы полностью отбрасываются вместе со своими стилями. Вам просто нужно выяснить ловушку для вызова метода "styling" и повторно выполнить этот вызов после перерисовки таблицы.
Обычно я использую тег a4j:status и настраиваю onstart или onstop для повторного анализа таблицы.