【问题标题】:Primefaces Datatable - Sorting doesn't workPrimefaces 数据表 - 排序不起作用
【发布时间】:2019-04-29 01:34:43
【问题描述】:

我在JSF / xhtml 页面中遇到问题,我的primefaces 数据表无法正确排序和过滤。我从我的数据库中填充数据表,效果很好。但是,一旦我开始在过滤器中输入内容,或者单击列标题进行排序,所有条目都会消失。我真的不知道我的错误在哪里。 这是JSF中数据表的代码:

<p:dataTable var="c" value="#{proposalController.contractList}">

    <p:column  headerText="ID" sortBy="#{c.id}" filterBy="#{c.id}" filterMatchMode="contains">
        <h:outputText value="#{c.id}" />
    </p:column>

    <p:column headerText="Customer Name" sortBy="#{c.custName}" filterBy="#{c.custName}" filterMatchMode="contains">
        <h:outputText value="#{c.custName}" />
    </p:column>

    <p:column headerText="Asset" sortBy="#{c.asset}" filterBy="#{c.asset}" filterMatchMode="contains">
        <h:outputText value="#{c.asset}" />
    </p:column>


</p:dataTable>

这是它背后的java代码:

package controller;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import model.Contract;
import model.ContractManager;

@ManagedBean (name="proposalController")
@SessionScoped
public class proposalController {

    @EJB
    private ContractManager contract;
    private int id;
    private String custName;
    private String custStreet;
    private String custZIP;
    private String custCity;
    private int creditScore;
    private String custPers;
    private String mail;
    private String phone;
    private Date start;
    private Date endd;
    private String asset;
    private String insurance;
    private double rate;
    private String status;
    private List<Contract> contractList;  




    public List<Contract> getContractList() {
        this.contractList = contract.getContractList();
        return this.contractList;
    }

如果有人可以帮助我,那就太好了!

【问题讨论】:

  • PrimeFaces showcse 工作得非常好......
  • 离题:所有这些属性(看起来像合同属性)是什么?为这些设置一个private Contract selectedContract 属性可能会更好。
  • @JasperdeVries 我也使用此类“proposalController”来保存具有相应属性的新合同。你会建议为此单独开设一个课程吗?
  • 请参阅 stackoverflow.com/questions/10301363/jpa-entity-as-jsf-bean,了解您使用的 @JasperdeVries 所指的“聚集/分散”(反)模式。
  • 当通过单击列标题中的排序链接调用排序时,会调用该方法来填充数据表,这可能不会导致任何事情发生。我之前遇到过同样的问题,并通过在支持 bean 的 PostConstruct 中设置列​​表和一个单独的方法来返回在 PostConstruct 中填充的列表来解决它。我不能说过滤输入框,因为我不使用它们,但它可能与同一个问题有关。

标签: sorting jsf primefaces datatable


【解决方案1】:

在您的getContractList() 方法中,您从某个服务返回一个列表,这可能是每次调用该方法时的一个新列表。相反,您应该在初始化时从您的服务中获取此列表一次(例如一些 @PostConstruct-annotated 方法),将其保存在您的会话 bean 中并从您的会话 bean 中返回列表。

类似这样的:

@ManagedBean (name="proposalController")
@SessionScoped
public class proposalController {
    @EJB
    private ContractManager contract;

    private List<Contract> contractList;

    @PostConstruct
    public void init() {
        contractList = contract.getContractList();
    }

    public List<Contract> getContractList() {
        return this.contractList;
    }
}

【讨论】:

  • 感谢您的回答。我刚刚尝试过,但不幸的是它并没有改变我的问题。这是否表明问题可能出在 jsf 页面方面?
  • 我在您的代码中看不到任何其他明显的问题。您是否在服务器或浏览器的 JavaScript 控制台上收到任何错误日志?您使用的是什么版本的 PrimeFaces 和 JSF?
  • Glassfish 服务器日志和 JavaScript 控制台日志都是空的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 2011-06-28
  • 1970-01-01
  • 2013-12-01
  • 2012-11-19
  • 2014-07-26
  • 1970-01-01
相关资源
最近更新 更多