JackOld,
Conforme o Lucas mencionou… caso vc esteja trabalhando com jQuery, o componente datatable (datatables.net) é otimo.
Uso no meu projeto e é muito tranquilo de se trabalhar.
Fiz uma classe Wrapper p/ retorno o json de acordo com o o componente da Datatable precisa…
DataTableModel.java
[code]package br.com.virtuoso.prosaude.utils.view;
/**
-
@author guilherme.virtuoso
-
*/
public class DataTableModel {
private String sEcho;
private int iTotalRecords;
private int iTotalDisplayRecords;
private Object[] aaData;
public String getsEcho() {
return sEcho;
}
public void setsEcho(String sEcho) {
this.sEcho = sEcho;
}
public int getiTotalRecords() {
return iTotalRecords;
}
public void setiTotalRecords(int iTotalRecords) {
this.iTotalRecords = iTotalRecords;
}
public int getiTotalDisplayRecords() {
return iTotalDisplayRecords;
}
public void setiTotalDisplayRecords(int iTotalDisplayRecords) {
this.iTotalDisplayRecords = iTotalDisplayRecords;
}
public Object[] getAaData() {
return aaData;
}
public void setAaData(Object[] aaData) {
this.aaData = aaData;
}
}
[/code]
Minhas classes Controller extende uma Controller base para Processos… que tem este método:
[code]
/**
* Metodo Responsavel por alimentar as DataTables nas telas de Pesquisa
* @param data
* @throws Exception
*/
protected void processaDataTable(List<Object[]> data) throws Exception {
String localProcesso = tClass.getName() + “Controller.processaDataTable()”;
if (data == null) {
throw new MetodoNaoImplementadoException("O método " + localProcesso + “, não foi implementado corretamente!”);
}
DataTableModel dtModel = new DataTableModel();
dtModel.setsEcho(new Long(new Date().getTime()).toString());
dtModel.setiTotalDisplayRecords(baseDAO.getTotalRegistrosUltimaConsulta());
dtModel.setiTotalRecords(baseDAO.getTotal());
dtModel.setAaData(data.toArray());
result.use(Results.json()).withoutRoot().from(dtModel).include("aaData").serialize();
}[/code]
Abaixo um exemplo de uso em uma classe controller:
TabPaisController.java
[code]@Get
@Path("/tabPais/dataTableListaTodos.json")
@Override
@Restrito
public void dataTableListaTodos() {
String localProcesso = tClass.getName() + “Controller.dataTableListaTodos()”;
try {
String[] colunas = { "id", "descricao", "sigla", "tabAtivo.descricao" };
Map<String, Object> parametersDataTable = getParametersDataTable();
List<TabPais> lstTabPais = baseDAO.dataTableListaTodos(colunas, parametersDataTable);
.
.
. RESTANTE DE CODIGO
.
.
List<Object[]> data = new ArrayList<Object[]>();
for (TabPais tabPais : lstTabPais) {
Object[] linha = { ..... COLUNAS QUE ALIMENTARAO A DATA TABLE COM ALGUNS TRATAMENTOS ...... };
data.add(linha);
}
super.processaDataTable(data);
} catch (Exception e) {
lancarExcecao(e, localProcesso);
}
}[/code]
Note que no inicio do metodo anterior eu chamo getParametersDataTable(). Este método já traz um Map com todas as variaveis de request que a DataTable trabalha.
getParametersDataTable()
[code]/**
* Retorna os parametros necessarios para o funcionamento da DataTable
* @return
*/
protected Map<String, Object> getParametersDataTable() {
Map<String, Object> retorno = new HashMap<String, Object>();
Integer iDisplayLength = new Integer(request.getParameter("iDisplayLength") == null ? "0" : request.getParameter("iDisplayLength"));
Integer iDisplayStart = new Integer(request.getParameter("iDisplayStart") == null ? "0" : request.getParameter("iDisplayStart"));
Integer iColumns = new Integer(request.getParameter("iColumns") == null ? "0" : request.getParameter("iColumns"));
String allSearch = (request.getParameter("sSearch") == null ? "" : request.getParameter("sSearch"));
Boolean allRegex = new Boolean((request.getParameter("bRegex") == null ? false : true));
Boolean allSearchable = new Boolean((request.getParameter("bSearchable") == null ? false : true));
Boolean allSortable = new Boolean((request.getParameter("bSortable") == null ? false : true));
List fdRegex = new ArrayList();
List fdSearchable = new ArrayList();
List fdSortable = new ArrayList();
List fdDataProp = new ArrayList();
List fdSearch = new ArrayList();
List fdSortCol = new ArrayList();
List fdSortDir = new ArrayList();
for (int i = 0; i < iColumns; i++) {
fdRegex.add(new Boolean((request.getParameter("bRegex_" + i) == null ? false : true)));
fdSearchable.add(new Boolean((request.getParameter("bSearchable_" + i) == null ? false : true)));
fdSortable.add(new Boolean((request.getParameter("bSortable_" + i) == null ? false : true)));
fdDataProp.add((request.getParameter("mDataProp_" + i) == null ? "" : request.getParameter("mDataProp_" + i)));
fdSearch.add((request.getParameter("sSearch_" + i) == null ? "" : request.getParameter("sSearch_" + i)));
fdSortCol.add((request.getParameter("iSortCol_" + i) == null ? "" : request.getParameter("iSortCol_" + i)));
fdSortDir.add((request.getParameter("sSortDir_" + i) == null ? "" : request.getParameter("sSortDir_" + i)));
}
// System.out.println("##################### PARAMETROS DATA TABLE #################################################");
// System.out.println("iDisplayLength..:" + iDisplayLength.toString());
// System.out.println("iDisplayStart...:" + iDisplayStart.toString());
// System.out.println("iColumns........:" + iColumns.toString());
// System.out.println("allSearch.......:" + allSearch.toString());
// System.out.println("allRegex........:" + allRegex.toString());
// System.out.println("allSearchable...:" + allSearchable.toString());
// System.out.println("allSortable.....:" + allSortable.toString());
// System.out.println("fdRegex.........:" + fdRegex.toString());
// System.out.println("fdSearchable....:" + fdSearchable.toString());
// System.out.println("fdSortable......:" + fdSortable.toString());
// System.out.println("fdDataProp......:" + fdDataProp.toString());
// System.out.println("fdSearch........:" + fdSearch.toString());
// System.out.println("fdSortCol.......:" + fdSortCol.toString());
// System.out.println("fdSortDir.......:" + fdSortDir.toString());
// System.out.println("##################### PARAMETROS DATA TABLE #################################################");
// Montando o retorno
retorno.put("iDisplayLength", iDisplayLength);
retorno.put("iDisplayStart", iDisplayStart);
retorno.put("iColumns", iColumns);
retorno.put("allSearch", allSearch);
retorno.put("allRegex", allRegex);
retorno.put("allSearchable", allSearchable);
retorno.put("allSortable", allSortable);
retorno.put("fdRegex", fdRegex);
retorno.put("fdSearchable", fdSearchable);
retorno.put("fdSortable", fdSortable);
retorno.put("fdDataProp", fdDataProp);
retorno.put("fdSearch", fdSearch);
retorno.put("fdSortCol", fdSortCol);
retorno.put("fdSortDir", fdSortDir);
return retorno;
}[/code]
Bom, trabalhei duro durante um tempo quando iniciei os trabalhos com a datatable do jQuery, p/ que estes componentes ficassem o mais genérico e pratico possivel para uso…
Hoje em dia a reusabilidade deste codigo no meu sistema é enorme… ficou muito pratico… e espero que lhe ajude em algo tbm… caso decida usar jQuery.
Abraços