<rich:datatable>和<rich:datascroller>问题</rich:datascroller> </rich:datatable>

时间:2010-05-27 08:10:14

标签: jsf datatable richfaces datascroller

我正在开发一个Seam-Jsfv1.2-EJB3 Web应用程序。 我在每一行都有一个数据表和复选框。而且,我的桌子底部也有一个数据循环器。

我的问题是当我从滚动条单击下一页编号时,数据表第一页上的所选复选框消失了。我的意思是,即使他们被选中,点击下一页也会取消选中。我通过单击滚动条再次返回第一页来看到它。

你对这个问题有什么看法吗? 为了澄清我的情况,我附上了以下代码:

<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 个答案:

答案 0 :(得分:2)

在滚动条之间添加a4j支持标记解决了我的问题:

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

然而另一件事是,我正在使用JQuery来设置我的表格(例如鼠标上下),这次,当我点击表格的下一页时,样式就消失了。

任何帮助都会很棒,非常感谢提前。

** PS:BTW我想到的是,我不可能为这类问题找到解决方案。你的创作可能并不总是足以解决(至少在我的例子中,添加a4j:支持的东西)我问专家,我们怎么能自己处理这类事情...... **

答案 1 :(得分:2)

您可以延长org.richfaces.renderkit.html.DatascrollerTemplate 通过在faces-config.xml中添加具有以下配置的组件,为自己的样式编写自己的DataScroller

<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 :(得分:1)

您不需要jQuery来设置数据表的样式

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

答案 3 :(得分:1)

您所看到的删除样式的问题是由于AJAX的性质以及表重新生成的方式。

假设您正在基于某种形式的页面onLoad触发初始样式调用,则第一次呈现页面时,将应用您的样式。但是,当您单击带有分页器的“下一步”按钮时,您将删除大量新HTML,并使用更新,更新的信息替换表中的旧HTML。您看到的问题是您看到样式,因为jQuery将样式应用于节点,在reRender上,这些节点以及它们的样式完全被丢弃。您只需要找出钩子来调用“样式”方法,并在重新呈现表后重新执行该调用。

通常,我使用a4j:status标记,并设置onstart或onstop以重新解析表。