Проблема <rich: datatable> и <rich: datascroller> - PullRequest
1 голос
/ 27 мая 2010

Я занимаюсь разработкой веб-приложения 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 ]

2 голосов
/ 27 октября 2011

Вы можете продлить 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>
2 голосов
/ 27 мая 2010

Добавление тега поддержки a4j между скроллером решило мою проблему:

<f:facet name="footer">
  <rich:datascroller id="ds" renderIfSinglePage="false">
   <a4j:support event="onpagechange"/> 
  </rich:datascroller>
</f:facet>

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

Любая помощь будет отличной, большое спасибо заранее.

** PS: Кстати, самое странное, на мой взгляд, то, что я не могу самостоятельно найти решение для такого рода проблем. Ваше творение не всегда может быть достаточно для решения (по крайней мере, здесь, в моем примере, добавление a4j: support thing) Я спрашиваю экспертов, как мы можем справиться с такими вещами самостоятельно ... **

1 голос
/ 20 ноября 2011

Проблема, с которой вы столкнулись при удалении стилей, связана с характером AJAX и способом перерисовки таблицы.

Предполагая, что вы запускали первоначальный вызов стиля на основе какой-либо формы страницы onLoad, при первом отображении страницы ваши стили будут применены. Тем не менее, когда вы нажимаете кнопку «Далее» на странице, вы теряете много нового HTML-кода и заменяете старый HTML-код в таблице более новой, обновленной информацией. Проблема, с которой вы столкнулись, заключается в том, что вы видели стили, потому что jQuery применял стили к старым узлам, после reRender эти узлы полностью отбрасываются вместе со стилем. Вам просто нужно выяснить ловушку для вызова метода "styling" и повторно выполнить этот вызов после повторного рендеринга таблицы.

Обычно я использую тег состояния a4j: и настраиваю onstart или onstop для повторного анализа таблицы.

1 голос
/ 03 августа 2010

Вам не нужен jQuery для стилизации данных

<rich:dataTable id="dataTable" var="x"  
onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
...