"No records found" 不考虑 p:dataTable 的条件呈现列

"No records found" doesn't take conditionally rendered column of p:dataTable into account

我目前在使用 PrimeFaces 4.0 的数据Table 中呈现列的属性时遇到一个小问题。我的 table 中有一列不应始终显示,因此我使用了它的 rendered 属性并从我的支持 bean 中获取值。这是第 6 列也是最后一列。数据Table 位于p:dialog 内,将在方法结束时显示。

呈现的属性似乎可以正常工作,因为当 showColumn 为 false 时,该列将不会显示,反之亦然,但存在一个问题。如图所示,"No records found." 消息似乎要到最后一列才能到达。当我尝试删除呈现的属性或手动将其设置为 true(不使用支持 bean 值)时,"No records found." 消息将按预期到达最后一列。

包含这些元素的整个 dialog/form 似乎在 ajax 请求后正确更新。

支持 Bean 方法:

public void getStatus(final MyClass foo, boolean showColumn) {

    updateForm(foo);
    setShowColumn(showColumn);

    RequestContext.getCurrentInstance().execute("dailyStatus.show();");
}

xhtml 中的列部分:

<p:column headerText="Problematic Column" styleClass="tablecenter" rendered="#{myMBean.showColumn}">
    <p:commandLink id="view"
        action="#{myMBean.doSomething}" update="@form"
        rendered="#{obj.status.equals('FAILED')? 'true' : 'false'}"
        onclick="spin_start()" oncomplete="spin_stop()">
        <h:graphicImage name="images/restart.png" styleClass="icon" />
    </p:commandLink>
</p:column>

如 Table 所示:

对于 PrimeFaces 4.0,有一个 'solution',我使用 jQuery 求助于 hack-ish 来解决问题。对于最近的 PrimeFaces 版本,这已经修复

当需要显示动态列时,我在我的支持bean 中使用标志,然后调用此方法。 (并且数据表的列表应该为 null 或空,如问题中所述)

RequestContext.getCurrentInstance().execute("$('[id=\"myForm:myDataTable\"] tr.ui-widget-content td').attr('colspan', 6);");

这会强制 header 行之后的行上的单个 td 的 colspan 到达最后一个 header 列。希望这对以后遇到此问题的其他人有所帮助!