【问题标题】:Primefaces datatable header alignmentPrimefaces 数据表头对齐
【发布时间】:2013-05-09 16:15:09
【问题描述】:

我对 primefaces 数据表有疑问。如您所见,列边框和标题存在对齐问题。这是一个 primefaces 错误还是我的数据表有问题?顺便说一句,数据表有动态列。

<p:dataTable     scrollable="true" scrollWidth="100%" editable="true" editMode="cell"   
var="invoiceLine" value="#{myController.invoiceLines}"                          
                         selection="#{myController.selectedInvoiceLine}" selectionMode="single" rowKey="#{invoiceLine.uuid}"
                         >
<p:columns value="#{myController.columns}" var="column"
                           styleClass="ui-editable-column" width="50"
                           columnIndexVar="colIndex">

//some stuff
</p:columns>         

            </p:dataTable>

【问题讨论】:

  • 您使用的是哪个 primeface 版本。

标签: jsf jsf-2 primefaces


【解决方案1】:

此问题已在 primefaces 最新版本 (7.0) 中解决

https://github.com/primefaces/primefaces

【讨论】:

  • 不,不是,除非他们引入了一个回归错误,我在 10 并且它仍在发生
【解决方案2】:

这个问题在 6.2 中仍然存在。 在样式属性中设置宽度的另一种解决方案是替换

<p:column style="width:100px">

<p:column style="width:calc(100px)">

MDN-calc() description

【讨论】:

  • Remarkable...任何解释为什么这两个有不同的行为? (实际上很好奇;-))
【解决方案3】:

对于遇到此问题的其他人 - Primfaces 可滚动仍然存在问题。我在 5.1 上,但它不工作。

只需使用普通的数据表,然后使用 CSS3 来让滚动工作:

https://jsfiddle.net/xuvsncr2/170/

当然不要使用 table、thead、tr 等来定位元素。而是使用 css 类,以便获得正确的数据表。

棘手的部分是,为了设置滚动窗格的大小,您需要定位直接围绕表格的 div。你可以在下面看到我是如何做到的

更多关于 flexbox 的 css3:https://css-tricks.com/snippets/css/a-guide-to-flexbox/

这是我用于 primefaces 的 css 示例。我刚刚用&lt;div class="myCompanyScrollable thirtyEM"&gt; 包装了我的数据表

.thirtyEM .ui-datatable-tablewrapper{
height: 30em;
}
.myCompanyScrollable table {
    display: flex;
    flex-flow: column;
    height: 100%;
    width: 100%;
}
.myCompanyScrollable table thead {
    /* head takes the height it requires, 
    and it's not scaled when table is resized */
    flex: 0 0 auto;
    width: calc(100% - 1.05em);
    display: table;
    table-layout: fixed;
}
.myCompanyScrollable table tbody {
    /* body takes all the remaining available space */
    flex: 1 1 auto;
    display: block;
    overflow-y: scroll;
}
.myCompanyScrollable table tbody tr {
    width: 100%;
}
.myCompanyScrollable table tbody tr {
    display: table;
     width: 100%;
    table-layout: fixed;
}
/* decorations */
.myCompanyScrollable {
    border: 1px solid black;
    padding: 0.3em;
}
.myCompanyScrollable table {
    border: 1px solid lightgrey;
}
.myCompanyScrollable table td, .myCompanyScrollable table th {
    padding: 0.3em;
    border: 1px solid lightgrey;
}
.myCompanyScrollable table th {
    border: 1px solid grey;
}

【讨论】:

    【解决方案4】:

    做一招,

    Remove scrollable = true
    

    并创建新的样式类,例如,

    .ui-datatable-hor-scroll .ui-datatable-tablewrapper,.scrolling-div .ui-datatable-tablewrapper{
         overflow: auto;
         width: 100%;
         padding-bottom: 5px;}
    

    styleClass 应用到p:datatable 喜欢styleClass="ui-datatable-hor-scroll"

    【讨论】:

    • 我已经尝试过你的答案,但是 (1) 滚动不起作用 (2) 样式类仅适用于 div 而不是 table。 (IE8 上的 PF 3,5 和 4.0-SNAPSHOT)
    • 这样,如果向下滚动,标题将不可见
    【解决方案5】:

    试试下面的jquery代码

    $('.datatableclassname').find(('div.ui-datatable-scrollable-header ')+'div.ui-dt-c').each(function(index) {
                var cur_obj = $(this);
                var column_num = parseInt(index+1);
                $('.datatableclassname div.ui-datatable-scrollable-body tr > td:nth-child('+column_num+') > div.ui-dt-c').css('width',cur_obj.width()+'px');
            });
    

    【讨论】:

    • 我不明白 jquery 和 primefaces 之间的关系。我不使用 jquery。
    • @TurgutDsfadfa JSF 实现包括 jquery 库。您默认拥有它。我不明白的是为什么这张表变得如此复杂,无法 render 以及为什么它需要这个 complex patch 才能正确完成......你能添加一些代码吗?澄清这个数据表的特点是什么?问候,
    • @RodmarConde 这是我的专栏。我认为我的专栏有问题。顺便说一句,我的数据表中没有任何与样式相关的内容。
    • 数据表的可滚动属性是真的吗?
    • 如果删除 width="50" 会发生什么?您可以通过另一种方式实现列宽。问候,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2013-07-28
    • 2013-02-11
    • 1970-01-01
    • 2011-09-04
    相关资源
    最近更新 更多