Boa Noite a todos,
Estou a um tempo tentando integrar o ExtJS 4 com o VRaptor 3.4. Infelizmente a maioria dos exemplos de integração são antigos … datados de 2010 p/ trás quando o VRaptor precisava ainda de algumas "adaptações", mudanças estas que hoje já se encontram incorporadas na core do VRaptor como é o caso da ExtJSJson.class desenvolvida pelo nosso amigo Daniel Kist aqui do fórum.
Encontrei também exemplos de CRUD feitos pela Loiane, que participa aqui do fórum também e do fórum de ExtJS, porem feitos com SpringMVC.
De todo material que encontrei e venho estudado, infelizmente ainda não consegui fazer um misero "insert" de forma razoavel.
Selecionar as coisas do banco, montar as classes e serializa-las não tem misterio.
A tela de login, tbm não teve misterio pois eu tinha total controle sobre as fields … dizendo "olha… vc… tem que se chamar usuario.nome, p/ que o meu VRaptor carregue um objeto Usuario com o campo nome preenchido"
O problema todo comecou quando estou em uma View linkada com uma Controller, que trabalha com uma Store manipulando uma Model (tudo em JS) e todos eles trabalham com propriedades tipo … id, nome … e não meuModelo.id, meuModelo.nome.
Fazendo assim com que quando eu clico nos botao que disparam os inserts/updates … meu json vai todo errado p/ VRaptor, que por consequencia não consegue instanciar o objeto em questao.
Fiz uma baita gambiarra apenas para testar o insert, resgatei o parametro data do request e montei meu objeto na mao e devolvi p/ grid Ext … mas só p; testar.
@Post
@Path("/ganho/tipoGanho/insert.json")
@Transactional
public void tipoGanhoInsert(TipoGanho tipoGanho) {
tipoGanho = new TipoGanho();
// Gambiarra p/ arrumar o json e carregar o objeto só p/ testar o insert
// Formato que esta vindo o json -> {"id":"","nome":"Teste"}
String json = request.getParameter("data").replace("{", "").replace("}", "");
// Após o split: ["id":"", "nome":"Teste"]
String[] keyValue = json.split(",");
for(int i = 0; i<keyValue.length; i++) {
String[] valueBruto = keyValue[i].split(":");
if("nome".equals(valueBruto[0].replace("\"", ""))) {
tipoGanho.setNome(valueBruto[1].replace("\"", ""));
}
}
// Inserindo um objeto montado na Gambiarra que tem a propriedade nome setado para Teste
tipoGanhoDAO.salva(tipoGanho);
result.use(ExtJSJson.class).from(tipoGanho).success(tipoGanho != null).serialize();
}
O Ext está postando o cabecalho desta forma:
data {"id":"","nome":"Teste"}
dir ASC
limit limit
sort nome
start start
total total
Quando na verdade deveria montar com aquele padrao de meuModelo.atributo … tipoGanho.id, tipoGanho.nome :roll:
Não sei como fazer isto… já pesquisei e estudei e testei de muitas formas… mas encalhei neste ponto.
Alguem saberia como eu posso mandar la do ExtJS 4 este json preparado p/ VRaptor receber no metodo da controller e já alimentar um objeto ?
Obrigado>