Foro

struts1

0
Hola, acabo de inscribirme al foro, ya busque algo antes de postear mi pregunta y no encontré algo que me saque de dudas, agradecería mucho su ayuda, (incluido aquien hizo este foro: Crysfel, que por cierto te felicito los aportes son muy buenos me basé en el algunos de los tutoriales, para hacer algunas cosas). Tengo el siguiente problema: Estoy haciendo una aplicación con el uso de struts1 en mi acción tengo lo siguiente en el método execute: try{ tx = session.beginTransaction(); Usuario usuario = (Usuario) session.createQuery("FROM Usuario WHERE usuario='monica'").uniqueResult(); tx.commit(); if( usuario == null ) System.out.println("nulo"); else{ Gson gson = new Gson(); String jsonOutput = gson.toJson(usuario); System.out.println("{rows:["+jsonOutput+"]}"); } }catch( HibernateException e ){ e.printStackTrace(); e.getMessage(); e.getCause(); }finally{ HibernateUtil.getSessionFactory().close(); } return mapping.findForward("clientes"); como verán hasta aqui tengo una consulta en BD y el resultado lo tengo en un objeto llamado usuario el cual lo convierto mediante Gson en formato JSON, ahora el asunto es como pasarlo al jsp donde tengo el siguiente codigo EXTJS: Ext.onReady( function(){ var store = new Ext.data.JsonStore({ url:'/Soporte/clientes.do', root:'rows', fields:[ 'usuario', 'nombre', 'grupo', 'password', 'email', {name:'notificaContratoNuevo',type:'int'}, {name:'notificaFacturaNueva',type:'int'}, {name:'notificaFacturaAutoriza',type:'int'}, 'contPregunta', 'contRespuesta', {name:'intentosLogon',type:'int'}, {name:'ultimoLogon',type:'date'}, 'passwordHist01', 'passwordHist02', 'passwordHist03', {name:'fechaHoraBloqueo',type:'date'}, {name:'bloqueado',type:'int'} ] }); store.load(); var grid = new Ext.grid.GridPanel({ renderTo:document.body, frame:true, title:'Desbloqueo de Usuarios', height:200, width:1000, store:store, columns:[ {header:"Usuario", dataIndex: 'usuario'}, {header:"Nombre", dataIndex: 'nombre'}, {header:"Grupo", dataIndex: 'grupo'}, {header:"Password", dataIndex: 'password'}, {header:"Email", dataIndex: 'email'}, {header:"notificaContratoNuevo", dataIndex: 'notificaContratoNuevo'}, {header:"notificaFacturaNueva", dataIndex: 'notificaFacturaNueva'}, {header:"notificaFacturaAutoriza", dataIndex: 'notificaFacturaAutoriza'}, {header:"contPregunta", dataIndex: 'contPregunta'}, {header:"contRespuesta", dataIndex: 'contRespuesta'}, {header:"intentosLogon", dataIndex: 'intentosLogon'}, {header:"ultimoLogon", dataIndex: 'ultimoLogon'}, {header:"passwordHist01", dataIndex: 'passwordHist01'}, {header:"passwordHist02", dataIndex: 'passwordHist02'}, {header:"passwordHist03", dataIndex: 'passwordHist03'}, {header:"fechaHoraBloqueo", dataIndex: 'fechaHoraBloqueo'}, {header:"bloqueado", dataIndex: 'bloqueado'} ] }); }); en la consola java puedo ver el println de la variable jsonOutput de tal modo que de lado de la action según yo todo funciona bien del lado del jsp aparece el grid pero sin datos, que falta aqui??, com envío a extjs los datos de mi accion??? agradezco su ayuda....saludos a todos
0
Que bien que encontraste la solución, yo normalmente no utilizo los JSP's para desplegar unicamente el JSON, personalmente prefiero hacerlo desde el controller, por el contrario si voy a renderizar HTML ahí si que uso los JSP's para las vistas. Por otro lado te recomiendo utilizar (aquí en el foro) los tags <code class="prettyprint lang-java"> tu codigo aquí </code> para que podamos visualizar mejor el código. :-D Por lo pronto voy a editar tu post para agregarselos :-) Saludos
0
Gracias Crysfel por la respuesta, la respuesta que me das es buena, sin embargo como comente, ya tenia el action que renderiza el grid, y tambien el action que consulta a la BD solo faltaba "mostrar los datos en el grid", probé la forma que mencionas con el PrintWriter y no se ven los datos, encontré esta otra forma y jala muy bien, la compartiré ya que hay poca información sobre esto y nadie pone un ejemplo: este es el action en el metodo execute:(yo use Struts1) UsuarioForm usuarioForm = (UsuarioForm) form; Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = null; try{ tx = session.beginTransaction(); List lista = (List) session.createQuery("FROM Usuario WHERE bloqueado=1").list(); tx.commit(); if( lista == null ) return mapping.findForward("error"); else{ Gson gson = new Gson(); String jsonOutput = "{rows:"+gson.toJson(lista)+"}"; request.setAttribute("json", jsonOutput.trim()); /*aqui la parte inportante*/ response.setContentType("text/x-json;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); try { response.getWriter().write(jsonOutput); } catch (IOException e) { e.printStackTrace(); e.getMessage(); } } }catch( HibernateException e ){ e.printStackTrace(); e.getMessage(); e.getCause(); }finally{ HibernateUtil.getSessionFactory().close(); } //return null; return mapping.findForward("clientes"); como ven este metodo regresa un ActionForward "clientes "que en mi struts-config.xml retorna un jsp el cual contiene lo siguiente: es lo unico que debe tener el jsp no debe tener etiquetas html, tld, nada, solo lo que ven. Esto me pobla el grid. Espero les sirva, cualquier duda referente a esto en moises.zamudio@gmail.com estoy para ayudarles. Saludos
0
Hola @zamudio, bienvenido al foro. En primer lugar tendrías que crear un action que SOLO renderize el view donde está el grid de ExtJS, aquí no tienes que ir a la base de datos ni nada (a menos que sea necesario), simplemente vas a renderizar el grid sin información. El siguiente paso es hacer un action donde consultes la base de datos y expongas la información en formato JSON, de la siguiente manera: PrintWriter out = response.getWriter(); // Por ultimo configuras el PROXY del store que usa el grid para que realice la petición Ajax al ultimo action que creaste y donde estás exponiendo el JSON. Saludos

¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook

Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.