【问题标题】:Primefaces dynamic columns p:columns sort specific columnsPrimefaces 动态列 p:columns 对特定列进行排序
【发布时间】:2024-04-15 00:50:02
【问题描述】:

我有一个包含动态列的数据表,由 columnModel 定义。 String 属性链接到正确的字段(用于值输出)。 sort String 等于属性,但有些列不应该是可排序的,sort 是 null 或 emtpy(都试过)那里:

public class ColumnModel {
    private String property;
    private String sort;
    private int width;

    //GETTER
    ...
}

我使用该模型的列表来创建我的动态列。宽度的使用效果很好:

<p:dataTable value="#{bean.items}" var="item" ... >

    <p:columns value="#{bean.columnModel}" var="column" sortBy="#{column.sort}" width="#{column.width}">
        ...
    </p:columns>
</p:dataTable>

我的问题: sortBy 不允许空值或空值。否则我会得到一个解析异常,它说它无法解析#{item.}。 primefaces 似乎会在给定的排序字段之前自动添加“项目”(我的数据表的 var)。

如何忽略某些列?

感谢您的回答!

将 primefaces 5.0.9 与 Wildfly 9.0.2 结合使用

【问题讨论】:

  • 试过更新的 PF 版本?而且“我不能使用较新的版本”不是正确的回答;-)。在一个简单的测试项目 (minimal reproducible example) 中总是可以尝试查看它是否在较新的版本中得到解决。
  • 感谢您的回答,在 primefaces 5.2 中,正好有一个新属性可以解决这个问题。
  • 不客气。您可以自己创建答案。请这样做,因为它可能对其他人有帮助

标签: jsf primefaces datatable dynamic-columns


【解决方案1】:

Primefaces 在 5.1.3 和 5.2.0 版本中为 p:column(s) 添加了新属性:

  • 可排序
  • 可过滤

这里是已解决问题的链接:

https://code.google.com/archive/p/primefaces/issues/5021

示例取决于我上面的代码:

public class ColumnModel {
    private String property;
    private boolean sortable;
    private int width;

    //GETTER
    ...
}

在 bean 中使用给定的 List&lt;ColumnModel&gt; columnModel

<p:dataTable value="#{bean.items}" var="item" ... >

    <p:columns value="#{bean.columnModel}" var="column" sortBy="#{item[column.property]}" field="#{column.property}" sortable="#{column.sortable}" width="#{column.width}">
        ...
    </p:columns>
</p:dataTable>

【讨论】: