【问题标题】:PrimeFaces v3.4 ++: Datatable sorting is not working properly [closed]PrimeFaces v3.4 ++:数据表排序无法正常工作[关闭]
【发布时间】:2013-02-24 06:04:56
【问题描述】:

我有以下简单的测试页面:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Test page</title>
    </h:head>
    <h:body>
        <div id="container">
            <h:form>
                <p:dataTable id="unusedTable" var="c" value="#{couponBean.unusedCoupons}"
                                 paginator="true" rows="5">

                    <p:column headerText="#{l10n.id}" sortBy="#{c.id}">
                        <h:outputText value="#{c.id}" />  
                    </p:column> 

                    <p:column headerText="#{l10n.name}" sortBy="#{c.name}" >
                        <h:outputText value="#{c.name}" /> 
                    </p:column>

                </p:dataTable>
            </h:form>
        </div>
    </h:body>
</html>

当我使用 PrimeFaces v3.4.2 或 v3.5 部署应用程序时,我观察到以下奇怪的行为:

  • 原来:
  • 排序后:

如您所见,最初,表格的左侧出现了排序图标。如果我尝试对任何列进行排序,则会在原始表的第一列生成排序表。

我尝试使用 PrimeFaces v3.3.1 重新部署我的应用,并且一切正常。

如果您能告诉我如何解决这个问题,我将不胜感激。

最好的问候,

詹姆斯·特兰

【问题讨论】:

  • 我在您的代码中只能看到两列。能否提供更完整的代码示例?
  • @jedrus07:我已经用正确的图片更新了我的问题。其他代码不会导致此问题。 :)
  • 你在服务器上使用纯 JSF 吗?如果你有 Spring MVC/webflow,这可能会导致 PF 部分渲染出现问题
  • @rootkit:我正在本地测试页面。此外,我也不使用 Spring :)
  • 你能显示你的couponBean吗?

标签: java sorting jsf-2 primefaces datatable


【解决方案1】:

我的项目突然损坏了。我不知道为什么会这样。但是,在我创建了一个新项目并将所有文件复制过来后,使用 PrimeFaces v3.4+++ 进行排序再次正常工作。

【讨论】:

    【解决方案2】:

    只是一个想法-unusedCoupons 是什么类?是否可排序?如果不是(或者即使是)。只需尝试在filteredValue= 中添加ArrayList 与您的项目。这是过滤所必需的(因为它创建了一个存储临时过滤数据的地方),它也可以用于排序。

    额外信息

    我在我的 primefaces 3.4++ 上使用 p:dataTable 进行排序。我看到的区别是定义我使用的标题文本:

    <p:column sortBy="#{c.id}">
        <f:facet name="header">
            <h:outputText value="#{l10n.id}" />   
        </f:facet>
        <h:outputText value="#{c.id}" />
    </p:column>
    

    而不是你的headerText=。

    我所有的专栏也都分配了id。除此之外它是相同的(加上我有过滤)并且它可以正常工作。

    【讨论】:

    • :) 还是不行
    • c.id 和 c.name 只是字符串吗? couponBean 的作用域是什么?
    • bean是@ViewScoped,两个参数都是String
    • Annotation '@ViewScope' 在许多 JSF 实现中被破坏(如果您不使用 CODI 或 Seam)。您可以尝试将范围更改为“@ApplicationScope”以测试这是否相关吗?
    • 我认为问题不是由该注释引起的。它适用于 PrimeFaces v3.3.1。 :S
    【解决方案3】:

    尝试在数据表中添加 rowKey 属性。 rowKey="#{c.id}"

    【讨论】:

    • rowKey 是用来选择的,但我还是试过了,还是不行:)
    猜你喜欢
    • 2012-09-11
    • 2015-12-26
    • 1970-01-01
    • 2013-12-14
    • 2017-01-18
    • 1970-01-01
    • 2017-02-12
    • 2013-08-30
    • 2022-10-04
    相关资源
    最近更新 更多