Boa noite galera, já pesquisei bastante sobre esses metodos para ordenar e filtrar utilizando o primefaces com o dataTabe mas não sei onde estou errando.
quando eu coloco algum valor no filtro ele diz que nenhum valor foi encontrado e quando eu apago o valor da pesquisa, todos os resultados aparecem novamente.
segue o meu codigo : xhtml
[code]<h:form id=“form” rendered="#{LoginMB.logado}">
<p:growl id=“growl” showDetail=“true” />
<p:dataTable var=“hot” value="#{hotelMB.lazyModel}" paginator=“true” rows=“15"
paginatorTemplate=”{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}“
rowsPerPageTemplate=“5,10,15,20,25” selectionMode=“single” selection=”#{hotelMB.hotel}" id=“hotTable” lazy=“true” rowKey="#{hot.id_hotel}" >
<p:ajax event="rowSelect" update=":form:display" oncomplete="hotDialog.show()" />
<f:facet name="header" >
Hotéis
</f:facet>
<p:column headerText="Nome Hotel" sortBy="#{hot.nomeHotel}" filterBy="#{hot.nomeHotel}" id="nomeHotel">
#{hot.nomeHotel}
</p:column>
<p:column headerText="Razão Social" sortBy="#{hot.razaoSocial}" filterBy="#{hot.razaoSocial}" id="razaoSocial">
#{hot.razaoSocial}
</p:column>
<p:column headerText="Cnpj" sortBy="#{hot.cnpj}" filterBy="#{hot.cnpj}" id="cnpj">
#{hot.cnpj}
</p:column>
<p:column headerText="Endereço" sortBy="#{hot.endereco}" filterBy="#{hot.endereco}" id="endereco">
#{hot.endereco}
</p:column>
</p:dataTable> [/code]
meu ManagedBean :
[code]@ManagedBean(name=“hotelMB”)
@SessionScoped
public class HotelMB implements Serializable{
private HotelBean hotel;
private ArrayList<HotelBean> list_hoteis;
private LazyDataModel<HotelBean> lazyModel;
public HotelMB(){
hotel = new HotelBean();
}
public HotelBean getHotel() {
return hotel;
}
public void setHotel(HotelBean hotel) {
this.hotel = hotel;
}
public LazyDataModel<HotelBean> getLazyModel() {
return lazyModel;
}
public void setLazyModel(LazyDataModel<HotelBean> lazyModel) {
this.lazyModel = lazyModel;
}
public ArrayList<HotelBean> getList_hoteis() {
return list_hoteis;
}
public void setList_hoteis(ArrayList<HotelBean> list_hoteis) {
this.list_hoteis = list_hoteis;
}
public String consultaHoteis(){
try {
HotelDAO dao_Hotel = new HotelDAO();
list_hoteis = new ArrayList();
list_hoteis = dao_Hotel.hoteis();
lazyModel = new LazyHotelDataModel(list_hoteis);
// return list_hoteis;
} catch (ClassNotFoundException ex) {
Logger.getLogger(HotelMB.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(HotelMB.class.getName()).log(Level.SEVERE, null, ex);
}
return "consultaHotel.xhtml?faces-redirect=true";
}
}[/code]
minha classe LazyHotelDataModel :
[code]public class LazyHotelDataModel extends LazyDataModel{
private List<HotelBean> datasource;
public LazyHotelDataModel(List<HotelBean> datasource) {
this.datasource = datasource;
}
@Override
public List<HotelBean> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
List<HotelBean> data = new ArrayList<HotelBean>();
//filter
for(HotelBean hotel : datasource) {
boolean match = true;
for(Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
try {
String filterProperty = it.next();
String filterValue = filters.get(filterProperty);
String fieldValue = String.valueOf(hotel.getClass().getField(filterProperty).get(hotel));
if(filterValue == null || fieldValue.startsWith(filterValue)) {
match = true;
}
else {
match = false;
break;
}
} catch(Exception e) {
match = false;
}
}
if(match) {
data.add(hotel);
}
}
//sort
if(sortField != null) {
Collections.sort(data, new LazySorterHotel(sortField, sortOrder));
}
//rowCount
int dataSize = data.size();
this.setRowCount(dataSize);
//paginate
if(dataSize > pageSize) {
try {
return data.subList(first, first + pageSize);
}
catch(IndexOutOfBoundsException e) {
return data.subList(first, first + (dataSize % pageSize));
}
}
else {
return data;
}
}
}[/code]
o que eu realmente preciso para o metodo sortBy e filterBy do primefaces funcione ??