1

列で並べ替えた後の DataTable ライブ スクロールの問題の解決策を見つけるためにしばらく探していました。

最初に、「列」の幅を固定する必要があることがわかりました。

http://code.google.com/p/primefaces/issues/detail?id=1333

次に、行の代わりに scrollRows を使用する必要があることがわかりました

http://code.google.com/p/primefaces/issues/detail?id=1236

これらの変更を行いましたが、列で並べ替えた後にライブスクロールを配置できませんでした。

誰でも私を助けてもらえますか?

ありがとうございます。それでは、お元気で。

<p:dataTable  id="simulationProductDtId" emptyMessage="#{msgs.notFoundSimulationDetail}" var="item"
         value="#{SimulationResultProductBean.simulationSummaryDetailList}"
         scrollable="true"
         scrollRows="25"
         scrollHeight="350" 
         liveScroll="true"
          resizableColumns="true" 
         style="border-bottom:1px solid #427CC7; overflow:scroll;position: relative;max-width: 100%;overflow-x: hidden"
         rowStyleClass="#{(SimulationResultProductBean.collapseSuperCode and item.gam) ? 'row' : null}"
          selection="#{SimulationResultProductBean.selectedSimulationDetail}" selectionMode="multiple"
         rowKey="#{item.id}">
          <f:facet name="header">
                                                  ...
          </f:facet>
          <p:column sortBy="#{item.productCode}" width="40"
                          rendered="#{DynamicSimulationTableBean.columnRenderedMap['productCode']}">
                         <f:facet name="header">
                               <h:outputLabel value="#{msgs.code}"/>
                          </f:facet>
                          <h:outputText value="#{item.productCode}" >
                                 <f:convertNumber type="number" integerOnly="true" groupingUsed="false"/>
                         </h:outputText>
           </p:column>

           <p:column sortBy="#{item.productName}" style="width:100px"
                           rendered="#{DynamicSimulationTableBean.columnRenderedMap['productName']}">
                          <f:facet name="header">
                             <h:outputLabel value="#{msgs.description}"/>
                          </f:facet>
           </p:column>
          //Other columns with fixed widths...

4

5 に答える 5

0

データテーブルの上部にリマインダーが付いたLAZYソリューションを見つけました。

    <script> 
    function liveScroll(){
         simulationProductDt. scrollOffset = 25;
     }
    </script>
     <!-- UPDATE scrollOffset value in the liveScroll method when scrollRows is changed!-->
    <p:dataTable  id="simulationProductDtId" emptyMessage="#{msgs.notFoundSimulationDetail}" 
                         scrollable="true" scrollRows="25" scrollHeight="350"  liveScroll="true" 
                        ...other properties


         <p:ajax  event="sort" update="simulationProductDtId" onstart="liveScroll()" onerror="alert('ERROR!')" />
     </p:dataTable>

これが誰かに役立つことを願っています。

于 2013-01-24T09:54:17.813 に答える
0

プライムフェイスのバージョンを確認してください。プライムフェイスのデータテーブルは非常に不安定なコンポーネントのようです。

並べ替えられた列でバージョン 3.4 を使用していますが、ライブ スクロールを作成しようとしたことはありません。ページスクロールを使っています。ブラウザも確認してください。Internet Explorer は非常に不安定です。

于 2013-01-15T12:54:32.827 に答える
0

SerhatTR の anwser はほぼ成功しました。:) クライアント側の scrollOffset は、並べ替えの前に liveScroll テーブルでリセットする必要があります。

于 2014-02-14T19:08:23.550 に答える
0

受け入れられた回答で言及されているように、クライアント側scrollOffsetの Datatable ウィジェット オブジェクトのプロパティです。 widgetVarid

<p:dataTable id="tableId" widgetVar="tableWidget" >
   <p:ajax event="sort" update="tableId" onstart="resetScrollPos()" />
   ...
</p:dataTable>

<script type="text/javascript">
    fucntion resetScrollPos(){
        tableWidget.scrollOffset = 25;
    }
</script>
于 2015-04-29T07:08:11.293 に答える