Pessoal estou precissando fazer uma paginação sob demamda na minha p:dataTable, para isso estou usando o primefaces 3.0 M3 e o hibernat. Vou postar meus códigos para ver se alguérm pode me ajudar;
CarretaDAO
[code]public interface CarretaDAO {
..............
public List<Carreta> getBuscaCodigo(Integer codigocarreta);
}[/code]
CarretaDAOImpl
[code]public class CarretaDAOImpl extends GenericDAO implements CarretaDAO {
private static final long serialVersionUID = 1L;
private Session session;
public CarretaDAOImpl(Session session) {
this.session = session;
}
public CarretaDAOImpl() {
this.session = getSession();
}
..........
@SuppressWarnings("unchecked")
public List<Carreta> getListaPaginado(int inicio, int quantidade) {
Session ses = getSession();
Query query = ses.createQuery("SELECT e FROM Carreta e").setFirstResult(inicio).setMaxResults(quantidade);
List<Carreta> lista = (List<Carreta>) query.list();
ses.close();
return lista;
}
}[/code]
LazyCarretaDataModel
[code]public class LazyCarretaDataModel extends LazyDataModel {
private CarretaDAO carretaDAO = new CarretaDAOImpl();
public LazyCarretaDataModel(CarretaDAO carretaDAO) {
this.carretaDAO = carretaDAO;
setRowCount(Long.valueOf(carretaDAO.count()).intValue()); //Aqui um método que retorne o número total de linhas do banco
}
@Override
public List<Carreta> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
int page = first == 0 ? 0 : first / pageSize;
List<Carreta> carretas = carretaDAO.getListaPaginado(first, page); //Aqui um método que possa ser passado por parametro o dados da paginação
return carretas; //Retorna uma lista com somente os dados já filtrados no banco
}
@Override
public Object getRowKey(Carreta object) {
return object;
}
@Override
public Carreta getRowData(String rowKey) {
return super.getRowData(rowKey);
}
}[/code]
CarretaMBean
[code]public class CarretaMBean implements Serializable {
@PostConstruct
public void init(){
setLazyModel(new LazyCarretaDataModel(carretaDAO));
}
public LazyDataModel getLazyModel() {
return lazyModel;
}
public void setLazyModel(LazyDataModel<Carreta> lazyModel) {
this.lazyModel = lazyModel;
}
…
}[/code]
carreta.xhtml
[code]<p:dataTable id=“dtCarreta” value="#{carretaMBean.lazyModel}" lazy=“true” var=“item” paginator=“true” rows=“5"
emptyMessage=”#{msgs.dtVazia}" rowsPerPageTemplate=“5,10,15” selection="#{carretaMBean.selectedCarretas}“
paginatorTemplate=”{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink}
{LastPageLink} {RowsPerPageDropdown}" rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? ‘even-row’ : ‘odd-row’}"
rowIndexVar=“rowIx”>
<f:facet name="header">
<p:commandButton id="cbtGravar" value="#{msgs.cbtGravar}" update="frmCadastrarCarreta:pgSalvar"
oncomplete="multiCarDialog.show()" image="ui-icon-disk">
<f:setPropertyActionListener value="#{true}" target="#{carretaMBean.cbtAlterar}" />
<f:setPropertyActionListener value="#{false}" target="#{carretaMBean.cbtSalvar}" />
<f:setPropertyActionListener value="#{false}" target="#{carretaMBean.cbtLimpar}" />
<f:setPropertyActionListener value="#{false}" target="#{carretaMBean.dSalvar}" />
</p:commandButton>
<p:commandButton id="cbtEditar" value="#{msgs.cbtAlterar}"
update="frmCadastrarCarreta:pgSalvar, frmCadastrarCarreta:msgs"
oncomplete="editar(xhr, status, args)"
image="ui-icon-disk"
action="#{carretaMBean.editar}">
<f:setPropertyActionListener value="#{false}" target="#{carretaMBean.cbtAlterar}" />
<f:setPropertyActionListener value="#{true}" target="#{carretaMBean.cbtSalvar}" />
<f:setPropertyActionListener value="#{true}" target="#{carretaMBean.cbtLimpar}" />
<f:setPropertyActionListener value="#{false}" target="#{carretaMBean.dSalvar}" />
</p:commandButton>
<p:commandButton id="btnExcluirCarreta" value="#{msgs.cbtExcluirCarreta}"
image="ui-icon ui-icon-close" oncomplete="excluir(xhr, status, args)"
action="#{carretaMBean.excluir}" update="frmCadastrarCarreta:msgs">
<f:setPropertyActionListener value="#{item}" target="#{carretaMBean.selectedCarreta}" />
<f:setPropertyActionListener value="#{true}" target="#{carretaMBean.dSalvar}" />
</p:commandButton>
</f:facet>
<p:column selectionMode="multiple" />
<p:column id="clnCodCarreta" style="width: 50px" >
<f:facet name="header">
<h:outputText id="optCodigoCarreta" value="#{msgs.optTableCodigoCarreta}" />
<br/>
<p:inputText id="iptFiltroCodCarreta" value="#{carretaMBean.codigo}" size="12">
<p:ajax event="keyup" update="dtCarreta" listener="#{carretaMBean.buscaCodigo}" oncomplete="FocoFiltrarCod(xhr, status, args)"/>
</p:inputText>
</f:facet>
<h:outputText value="#{item.codigocarreta}"/>
</p:column>
<p:column id="clnDescricaoCarreta">
<f:facet name="header">
<h:outputText id="optDescricaoCarreta"
value="#{msgs.optTableDescricaoCarreta}" />
</f:facet>
<h:outputText value="#{item.descricao}"/>
</p:column>
<p:column id="clnPlaca" sortBy="#{item.placa}" filterBy="#{item.placa}">
<f:facet name="header">
<h:outputText value="#{msgs.optTablePlacaCarreta}" />
</f:facet>
<h:outputText value="#{item.placa}"/>
</p:column>
<p:column id="clnAno" sortBy="#{item.ano}" filterBy="#{item.ano}">
<f:facet name="header">
<h:outputText value="#{msgs.optTableAnoCarreta}" />
</f:facet>
<h:outputText value="#{item.ano}"/>
</p:column>
<p:column id="clnCor" sortBy="#{item.cor}" filterBy="#{item.cor}">
<f:facet name="header">
<h:outputText value="#{msgs.optTableCorCarreta}" />
</f:facet>
<h:outputText value="#{item.cor}"/>
</p:column>
<p:column id="clnCarroceira" sortBy="#{item.carroceria.descricao}"
filterBy="#{item.carroceria.descricao}">
<f:facet name="header">
<h:outputText value="#{msgs.optTableCarroceriaCarreta}" />
</f:facet>
<h:outputText value="#{item.carroceria.descricao}"/>
</p:column>
<f:facet name="footer">
<h:outputText value="#{msgs.contaRegistros} #{carretaMBean.carretas.rowCount}"/>
</f:facet>
</p:dataTable>[/code]
O problema é que não aparece nenhum dado na tabela. Alguém tem alguma ideia?
Abraço.