Temos varias views de usuario que fazem uso de jqgrid, e este precisam de um json especifico. Para isto estamos criando classes para cada jqgrid necessario, mas muitas vezes estes são simples. vejas as classes:
@Component
public class ListaModuloJson {
public int total;
public int page;
public int records;
public List<Modulo> rows;
private final ModuloDAO moduloDAO;
public ListaModuloJson(ModuloDAO moduloDAO) {
this.moduloDAO = moduloDAO;
}
public ListaModuloJson montaListaModuloJson() {
this.rows = this.moduloDAO.pegaTodos();
this.page = 1;
this.total = (this.rows.size() / 10) + 1;
this.records = this.rows.size();
return this;
}
}
E esta:
@Component
public class ListaTelaJson {
public int total;
public int page;
public int records;
public List<Tela> rows;
private final TelaDAO telaDAO;
public ListaTelaJson(TelaDAO telaDAO) {
this.telaDAO = telaDAO;
}
public ListaTelaJson montaListaTelaJson() {
this.rows = this.telaDAO.pegaTodos();
this.page = 1;
this.total = (this.rows.size() / 10) + 1;
this.records = this.rows.size();
return this;
}
}
Tentei fazer criar uma classe generica para jqgrid, onde no construtor ele recebe no rows, a lista que quero mandar. fiz esta classe:
public class JqGrid<T> {
public int total;
public final int page;
public final int records;
public final List<T> rows;
public JqGrid(List<T> rows) {
this.rows = rows;
this.page = 1;
this.total = (this.rows.size() / 10) + 1;
this.records = this.rows.size();
}
public int getTotal() {
return total;
}
public int getPage() {
return page;
}
public int getRecords() {
return records;
}
public List<T> getRows() {
return rows;
}
}
@Get
@Path("permissao/tela/listatela.json")
public void buscaListaTelas() {
JqGrid<Tela> jqGrid = new JqGrid<Tela>(this.telaDAO.pegaTodos());
this.result.use(json()).withoutRoot().from(jqGrid).include("rows").include("rows.modulo").serialize();
}
Caused by: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
at br.com.caelum.vraptor.serialization.xstream.XStreamSerializer.getActualType(XStreamSerializer.java:217)
at br.com.caelum.vraptor.serialization.xstream.XStreamSerializer.include(XStreamSerializer.java:199)
at br.com.diplomata.controllers.PermissaoController.buscaListaTelas(PermissaoController.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)