【问题标题】:ui: repeat + p: datatable questionui: 重复 + p: 数据表问题
【发布时间】:2011-02-09 16:35:46
【问题描述】:

我通过ui:repeat显示多个p:datatable,以下代码sn-p说明了我在做什么:

<ui:repeat id="searchTables"
    value="#{searchBean.mapKeys}"
    var="mapKeys">
         <p:dataTable id="recordTable"
            value="#{searchBean.resultMap[mapKeys].resultList}"
            var="recordTable"
            paginator="true"
            rows="10">
                 <f:facet name="header">
                      <h:outputText value="#{searchBean.resultMap[mapKeys].name}"/>
                 </f:facet>
                    <p:columns value="#{searchBean.resultMap[mapKeys].resultColumns}"
                               var="column"
                               columnIndexVar="colIndex">
                        <f:facet name="header">
                            <p:outputPanel>
                                #{column.header}
                            </p:outputPanel>
                        </f:facet>
                        <h:outputText value="#{recordTable[column.property]}"/><br/>
                    </p:columns>
         </p:dataTable>
 </ui:repeat>

我需要每个单独的数据表都有自己的分页器,但是当我的页面显示时,只有第一个数据表获取分页器,并且此分页器控制所有其他显示的数据表页面..

感谢您的关注!

【问题讨论】:

    标签: jsf datatable primefaces


    【解决方案1】:

    我发现的唯一方法是使用两个 p:datatable 标签,父标签只有一列。我无法让它与 p:dataList 一起工作。我猜 p:dataList 正在扩展同一个假类。

    应该使用这个:

    <p:datatable id="searchTables"
        value="#{searchBean.mapKeys}"
        var="mapKeys">
        <p:column>
             <p:dataTable id="recordTable"
                value="#{searchBean.resultMap[mapKeys].resultList}"
                var="recordTable"
                paginator="true"
                rows="10">
                     <f:facet name="header">
                          <h:outputText value="#{searchBean.resultMap[mapKeys].name}"/>
                     </f:facet>
                        <p:columns value="#{searchBean.resultMap[mapKeys].resultColumns}"
                                   var="column"
                                   columnIndexVar="colIndex">
                            <f:facet name="header">
                                <p:outputPanel>
                                    #{column.header}
                                </p:outputPanel>
                            </f:facet>
                            <h:outputText value="#{recordTable[column.property]}"/><br/>
                        </p:columns>
             </p:dataTable>
        </p:column>     
     </p:dataTable>
    

    【讨论】:

      【解决方案2】:

      这可能与JSF issue 1830有关。

      最好的办法是将ui:repeat 替换为另一个可以更好地完成UINamingContainer 工作的中继器,例如&lt;p:dataList&gt; 甚至另一个&lt;p:dataTable&gt;&lt;p:dataList&gt; 的列表项目符号可以被 CSS list-style-type: none 删除。

      如果这也不起作用,那么它可能是 PrimeFaces &lt;p:dataTable&gt; 本身的错误。

      【讨论】:

      • 感谢您的回答,建议的解决方案都不起作用,我猜这是&lt;p:dataTable&gt; 本身的错误:(
      • 这根本不考虑客户端 ID。它不是UINamingContainer 组件。此外,它仅在视图构建期间执行,而不是在视图渲染期间执行。
      • Balus 嗨,在分配 &lt;p:dataTable id="recordTable"...&gt; 时,我之前是否为 ui:repeat 生成的所有表分配了唯一 ID?如果是这样,我如何分配动态 ID 或类似 ID?谢谢
      • ui:repeatp:datalistp:datatable 尝试了一个动态ID 没有工作:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      相关资源
      最近更新 更多