Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/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
Jsf 2 Primefaces数据表冻结列错误对齐_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf 2 Primefaces数据表冻结列错误对齐

Jsf 2 Primefaces数据表冻结列错误对齐,jsf-2,primefaces,datatable,Jsf 2,Primefaces,Datatable,我们有一个数据表,如图所示。有3个冻结列,其余列可滚动。如图所示,冻结柱被错误对齐。如果删除了“冻结列”属性,则表看起来会正常。任何解决问题的建议 在类似的用例中,我们也遇到了同样的问题。 据我所知,没有很好的解决办法 正如我们所解决的,最简单的方法是每次重新绘制数据表(包括排序等ajax事件)时调整较小tr和th的高度 另一种可能的方法是防止不同的高度,例如阻止线断开。Primefaces数据表冻结: 冻结数据表有两部分:左(固定)和右(动态/可滚动) 我曾经遇到过类似的问题,比如冻结的dat

我们有一个数据表,如图所示。有3个冻结列,其余列可滚动。如图所示,冻结柱被错误对齐。如果删除了“冻结列”属性,则表看起来会正常。任何解决问题的建议


在类似的用例中,我们也遇到了同样的问题。 据我所知,没有很好的解决办法

正如我们所解决的,最简单的方法是每次重新绘制数据表(包括排序等ajax事件)时调整较小tr和th的高度


另一种可能的方法是防止不同的高度,例如阻止线断开。

Primefaces数据表冻结:

冻结数据表有两部分:左(固定)和右(动态/可滚动)


我曾经遇到过类似的问题,比如冻结的datatable,在不同的帖子中使用了许多不同的脚本。我发现下面的脚本适用于所有浏览器,不需要您设置它将计算的高度。作为额外的好处,它还触发浏览器事件,强制表正确调整大小

synchronizeRowsHeight : function() {
   var $leftRows = $('.ui-datatable-frozenlayout-left').find('tr');
   var $rightRows = $('.ui-datatable-frozenlayout-right').find('tr');

   $leftRows.each(function(index) {
         var $leftRow = $(this);
         var $leftHeight = $leftRow.innerHeight();
         var $rightRow = $rightRows.eq(index);
         var $rightHeight = $rightRow.innerHeight();

         if ($rightHeight > $leftHeight) {
                $leftRow.innerHeight($rightHeight);
                var diff = $rightHeight - $leftRow.innerHeight();
                if (diff != 0)
                       $leftRow.innerHeight($rightHeight + diff);
         } else if ($rightHeight < $leftHeight) {
                $rightRow.innerHeight($leftHeight);
                var diff = $leftHeight - $rightRow.innerHeight();
                if (diff != 0)
                       $rightRow.innerHeight($leftHeight + diff);
         }
   })

   // fire a resize event to tell the table to repaint
   $(window).trigger('resize');
}
synchronizeRowsHeight:function(){
var$leftRows=$('.ui datatable frozenlayout left')。find('tr');
var$rightRows=$('.ui datatable frozenlayout right')。find('tr');
$leftRows.each(函数(索引){
变量$leftRow=$(此);
var$leftHeight=$leftRow.innerHeight();
var$rightRow=$rightRows.eq(索引);
var$rightHeight=$rightRow.innerHeight();
如果($rightHeight>$leftHeight){
$leftRow.innerHeight($rightHeight);
var diff=$rightHeight-$leftRow.innerHeight();
如果(差异!=0)
$leftRow.innerHeight($rightHeight+diff);
}else if($rightHeight<$leftHeight){
$rightRow.innerHeight($leftHeight);
var diff=$leftHeight-$rightRow.innerHeight();
如果(差异!=0)
$rightRow.innerHeight($leftHeight+diff);
}
})
//触发调整大小事件以通知表重新绘制
$(window.trigger('resize');
}

为什么不在PrimeFaces extensions中使用“fork”p:dataTable并使其成为新功能的“游乐场”?我很乐意提供一些额外的功能,我已经考虑过了。问题是Datatable是一个非常强大的东西,JS非常庞大,我不确定我是否想维护它。即使我有一个数据表问题,我通常也会向PF报告,让Mert来解决,因为他现在似乎是唯一一个对数据表进行修改的人。即使是tandraschko通常也不去理会datatable的bug!你能说明你的问题是什么吗?因此,我可以更好地尝试将其合并到PF中(或修复datatable js和/或renderer@Kukeltje我认为这是同一个问题:
RequestContext.getCurrentInstance().execute("synchronizeRowsHeight();");
synchronizeRowsHeight : function() {
   var $leftRows = $('.ui-datatable-frozenlayout-left').find('tr');
   var $rightRows = $('.ui-datatable-frozenlayout-right').find('tr');

   $leftRows.each(function(index) {
         var $leftRow = $(this);
         var $leftHeight = $leftRow.innerHeight();
         var $rightRow = $rightRows.eq(index);
         var $rightHeight = $rightRow.innerHeight();

         if ($rightHeight > $leftHeight) {
                $leftRow.innerHeight($rightHeight);
                var diff = $rightHeight - $leftRow.innerHeight();
                if (diff != 0)
                       $leftRow.innerHeight($rightHeight + diff);
         } else if ($rightHeight < $leftHeight) {
                $rightRow.innerHeight($leftHeight);
                var diff = $leftHeight - $rightRow.innerHeight();
                if (diff != 0)
                       $rightRow.innerHeight($leftHeight + diff);
         }
   })

   // fire a resize event to tell the table to repaint
   $(window).trigger('resize');
}