Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 按列排序后未执行DataTable live scroll_Sorting_Primefaces_Datatable_Scroll - Fatal编程技术网

Sorting 按列排序后未执行DataTable live scroll

Sorting 按列排序后未执行DataTable live scroll,sorting,primefaces,datatable,scroll,Sorting,Primefaces,Datatable,Scroll,在按列排序后,我一直在搜索DataTable live scroll问题的解决方案 <p:dataTable id="tableId" widgetVar="tableWidget" > <p:ajax event="sort" update="tableId" onstart="resetScrollPos()" /> ... </p:dataTable> <script type="text/javascript"> fu

在按列排序后,我一直在搜索DataTable live scroll问题的解决方案

<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>
首先,我发现“列”应该有固定的宽度:

<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>

<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>
然后我发现应该使用scrollRows而不是rows

<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>

<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>
虽然我做了这些更改,但在按列排序后,我无法放置live scroll

<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>
有人能帮我吗

<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>
谢谢和问候

<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...
<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>

...
//其他具有固定宽度的列。。。

检查您的primefaces版本,primefaces中的datatable似乎是一个非常不稳定的组件

<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>
我使用的是3.4版的排序列,但我从未尝试过制作实时滚动。我使用页面滚动。
也请检查您的浏览器,Internet Explorer非常不稳定。

检查您的primefaces版本,primefaces中的datatable似乎是一个非常不稳定的组件

<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>
我使用的是3.4版的排序列,但我从未尝试过制作实时滚动。我使用页面滚动。
也请检查您的浏览器,Internet Explorer非常不稳定。

我发现了一个懒惰的解决方案,在数据表顶部有一个提醒:

    <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>
<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>

函数liveScroll(){
simulationProductDt.scrollOffset=25;
}

我发现了一个懒惰的解决方案,在datatable的顶部有一个提醒:

    <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>
<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>

函数liveScroll(){
simulationProductDt.scrollOffset=25;
}

SerhatTR的anwser几乎把它钉死了。:)
排序之前,需要在liveScroll表上重置客户端scrollOffset

SerhatTR的anwser几乎把它钉死了。:)
<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>

排序之前,需要在liveScroll表上重置客户端scrollOffset

如公认答案中所述,scrollOffset
是客户端Datatable小部件对象上的一个属性,即,
widgetVar
id
上找不到

<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>

...
功能重置滚动位置(){
tableWidget.scrollOffset=25;
}

如公认答案中所述,scrollOffset
是客户端Datatable小部件对象上的一个属性,即,
widgetVar
未在
id
上找到

<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>

...
功能重置滚动位置(){
tableWidget.scrollOffset=25;
}

回答这个问题可能太迟了,但我想与大家分享一个我已经实现的解决方案,因为我没有找到任何使用primefaces 5.2解决这个问题的代码

<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>
<p:dataTable id="entitiesTable" ...widgetVar="wtable" scrollRows="3" scrollable="true" liveScroll="true"... >
    <p:ajax event="filter" update="entitiesTable" oncomplete="resetScrollPos();" />
    <p:ajax event="sort" update="entitiesTable" oncomplete="resetScrollPos();" />
</p:dataTable>

<script type="text/javascript">
    function resetScrollPos(){
        PF('wtable').scrollOffset=0;    
        PF('wtable').scrollBody.scrollTop(1);   
        PF('wtable').allLoadedLiveScroll = false;               
    } 
</script>

函数resetScrollPos(){
PF('wtable')。scrollOffset=0;
PF('wtable').scrollBody.scrollTop(1);
PF('wtable')。allLoadedLiveScroll=false;
} 
该键被设置为de param ALLOADEDLIVESCROLL为false,以便在过滤器响应或排序操作后再次获取所有数据。Ajax事件配置为重置dataTable scroll小部件的参数

<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>

希望这对有同样问题的人有所帮助。

也许现在回答这个问题已经太迟了,但我想分享一个我已经实现的解决方案,因为我没有找到任何使用primefaces 5.2解决问题的代码

<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>
<p:dataTable id="entitiesTable" ...widgetVar="wtable" scrollRows="3" scrollable="true" liveScroll="true"... >
    <p:ajax event="filter" update="entitiesTable" oncomplete="resetScrollPos();" />
    <p:ajax event="sort" update="entitiesTable" oncomplete="resetScrollPos();" />
</p:dataTable>

<script type="text/javascript">
    function resetScrollPos(){
        PF('wtable').scrollOffset=0;    
        PF('wtable').scrollBody.scrollTop(1);   
        PF('wtable').allLoadedLiveScroll = false;               
    } 
</script>

函数resetScrollPos(){
PF('wtable')。scrollOffset=0;
PF('wtable').scrollBody.scrollTop(1);
PF('wtable')。allLoadedLiveScroll=false;
} 
该键被设置为de param ALLOADEDLIVESCROLL为false,以便在过滤器响应或排序操作后再次获取所有数据。Ajax事件配置为重置dataTable scroll小部件的参数

<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>

希望这对有同样问题的人有所帮助。

你好,谢谢你的回答,但我使用的是最新的稳定版本(pf 3.4.2)。该项目正在Chrome上运行。有很多记录的Live scroll,就像这种情况,有点失败。我发现,尽管正在滚动,但scrollOffset属性(按scrollRows大小)仍在不断增加_scrollOffset应该是scrollRows的值。我无法通过jquery访问该变量。在对数据表进行排序时,如何达到并更改_scrollOffset?(_scrollOffset可以在调试器控制台的CLASSNAME_scrollOffset定义的FormData头上查看)谢谢。您好,ddp,谢谢您的回答,但我使用的是最新的稳定版本(pf 3.4.2)。该项目正在Chrome上运行。有很多记录的Live scroll,就像这种情况,有点失败。我发现,尽管正在滚动,但scrollOffset属性(按scrollRows大小)仍在不断增加_scrollOffset应该是scrollRows的值。我无法通过jquery访问该变量。在对数据表进行排序时,如何达到并更改_scrollOffset?(_scrollOffset可以在调试器控制台的CLASSNAME_scrollOffset定义的FormData头上查看)谢谢。
<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>