My data model extends a lazydataModel.
for exemple:
Code: Select all
public class AreaLazyList extends LazyDataModel<Area> implements Serializable,
SelectableDataModel<Area> {
private static final long serialVersionUID = 1L;
// Data Source for binding data to the DataTable
private List<Area> areasLazy;
private int rowCount;
// Data Access Service for create read update delete operations
private Areas areas;
public AreaLazyList(Areas areas) {
this.areas = areas;
}
public List<Area> load(int posicaoPrimeiraLinha, int maximoPorPagina,
String ordernarPeloCampo, SortOrder ordernarAscOuDesc,
Map<String, String> filtros) {
String ordernacao = ordernarAscOuDesc.toString();
if (SortOrder.UNSORTED.equals(ordernarAscOuDesc)) {
ordernacao = SortOrder.ASCENDING.toString();
}
// with datatable pagination limits
areasLazy = areas.buscaPorPaginacao(posicaoPrimeiraLinha,
maximoPorPagina, ordernarPeloCampo, ordernacao, filtros);
// total encontrado no banco de dados, caso o filtro esteja preenchido
// dispara a consulta novamente
if (getRowCount() <= 0 || (filtros != null && !filtros.isEmpty())) {
setRowCount(areas.countAll(filtros));
}
// quantidade a ser exibida em cada página
setPageSize(maximoPorPagina);
return areasLazy;
}
@Override
public Object getRowKey(Area area) {
return area.getCodigo();
}
@Override
public Area getRowData(String rowKey) {
Integer id = Integer.valueOf(rowKey);
for (Area area : areasLazy) {
if (id.equals(area.getCodigo())) {
return area;
}
}
return null;
}
@Override
public void setRowIndex(int rowIndex) {
// solução para evitar ArithmeticException
if (rowIndex == -1 || getPageSize() == 0) {
super.setRowIndex(-1);
} else
super.setRowIndex(rowIndex % getPageSize());
}
@Override
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
@Override
public int getRowCount() {
return this.rowCount;
}
public List<Area> getAreasLazy() {
return areasLazy;
}
public Areas getAreas() {
return areas;
}
}
then i save:
Code: Select all
public void salvar() {
try {
cadastroAreaService.salvar(this.area);
lazyAreas.setRowIndex(listaDeAreas.indexOf(area));
limpar();
FacesUtil.addInfoMessage("Área "
+ FacesUtil.getMensagemI18n("salvo"));
} catch (Exception e) {
FacesUtil.addErrorMessage(e.getMessage());
}
}
my view:
Code: Select all
<p:toolbar>
<p:toolbarGroup>
<p:button value="#{msg.novo}" styleClass="botao-novo"
outcome="/omc/areas/CadastroArea" icon="ui-icon-plusthick" />
<p:commandButton value="#{msg.salvar}"
action="#{cadastroAreasBean.salvar}" icon="ui-icon-disk"
styleClass="botao-salvar" update="@form">
</p:commandButton>
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" styleClass="semBorda"
columnClasses="rotulo, campo">
<p:outputLabel value="#{msg.area} : *" for="area" />
<p:inputText id="area" size="50" maxlength="50"
style="text-transform: uppercase"
value="#{cadastroAreasBean.area.descricao}" />
</p:panelGrid>
<p:dataTable id="areasTable" value="#{cadastroAreasBean.lazyModel}"
var="area" style="margin-top: 20px;" rowKey="area.codigo" rowIndexVar="linha"
emptyMessage="#{msg.nenhuma_area}" paginatorPosition="bottom"
selectionMode="single"
selection="#{cadastroAreasBean.areaSelecionada}" rows="20"
paginator="true"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
currentPageReportTemplate="(#{msg.pagina} {currentPage} #{msg.de} {totalPages}) - (#{msg.registro} {startRecord} #{msg.a} {endRecord}) - Total ({totalRecords} #{msg.registros})"
paginatorAlwaysVisible="true" rowsPerPageTemplate="10, 20, 30"
lazy="true">