Primefaces Datatable - сортировка не работает - PullRequest
0 голосов
/ 27 ноября 2018

У меня проблема на странице JSF / xhtml, из-за которой мои данные не могут правильно сортироваться и фильтроваться.Я заполняю данные из моей базы данных, которая отлично работает.Однако, как только я начну что-то вводить в фильтр или щелкнуть заголовок столбца для сортировки, все записи исчезнут.Я действительно не знаю, где моя ошибка здесь.Это код данных в 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;
    }

Было бы здорово, если бы кто-то мог мне помочь!

1 Ответ

0 голосов
/ 27 ноября 2018

В вашем методе getContractList() вы возвращаете список из какой-либо службы, который, вероятно, является новым списком при каждом вызове метода.Вместо этого вы должны получить этот список только один раз из вашей службы при инициализации (например, некоторых @PostConstruct -аннотированных методов), сохранить его в своем сессионном компоненте и вместо этого вернуть список из вашего сессионного компонента.

Что-токак это:

@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;
    }
}
...