“未找到记录”不考虑有条件呈现的 p:dataTable 列

Posted

技术标签:

【中文标题】“未找到记录”不考虑有条件呈现的 p:dataTable 列【英文标题】:"No records found" doesn't take conditionally rendered column of p:dataTable into account 【发布时间】:2015-08-26 21:33:07 【问题描述】:

我目前在使用 PrimeFaces 4.0 的 dataTable 中的列的呈现属性存在一个小问题。我的表中有一个不应该总是显示的列,所以我使用了它的 rendered 属性并从我的支持 bean 中获取值。这是第 6 列也是最后一列。 dataTable 位于 p:dialog 中,该对话框将显示在方法的末尾。

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

包含这些元素的整个对话框/表单似乎在 ajax 请求后正确更新。

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

如表所示:

【问题讨论】:

您是否尝试过 PrimeFaces 11.6 而不是当前的 0.9 版本? 0.9 版本?你怎么知道?我实际上正在使用 Primefaces 4.0 现在很清楚了,我假设您尝试了更新的版本?幽灵狩猎(寻找已经在新版本中修复的东西)不是我们的爱好之一 ;-) 【参考方案1】:

对于 PrimeFaces 4.0,有一个“解决方案”,我使用 jQuery 对问题进行了 hack-ish 修复。对于最近的 PrimeFaces 版本,这已经修复

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

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

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

【讨论】:

这可能是古代 PrimeFaces 版本中的问题。在最近的版本中,这不是问题。

以上是关于“未找到记录”不考虑有条件呈现的 p:dataTable 列的主要内容,如果未能解决你的问题,请参考以下文章

未找到记录时,mysqli_query 不返回 false [重复]

如何在与有条件呈现的内容相关联的页面加载时不初始化 bean

在 React 中运行搜索后如何显示“未找到记录”

没有记录时如何在gridview“未找到记录”中显示文本

有条件地为活动/非活动用户呈现徽章

有条件地呈现结束标记以模拟日历行为