ARCmop Java Programacion Solaris Linux

Java-linux-programacion

Spring: Ejemplo simple de CRUD a una tabla y algunos alcances adicionales

Posted by Cmop en diciembre 11, 2010

Hola a todos, siguiendo con el ejemplo anterior y culminando con las operaciones CRUD (Create, Retrieve, Update,Delete) osea (Crear, Obtener, Actualizar y Borrar) , he colocado el video para que vean el resultado, el ejemplo es bastante simple, y espero que pueda ayudar a quien llegue a este blog a conocer una de las muchas maneras de utilizar Spring con Base de Datos, en este caso postgresql 9.

En esta oprotunidad mas que hacer énfasis en el codigo lo que haré es comentar como solucionar algunos de los problemas que se tienen cuando usamos spring en web.

  1. Problema con las Tildes y otros caracteres en Spring. Como se puede apreciar en el video las tildes se almacenan sin problema.
    Solucionamos agregando un filltro, en mi caso lo agregué en el archivo web.xml

    <filter>
    	<filter-name>SetCharacterEncodingFilter</filter-name>
    	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    	<init-param>
    		<param-name>encoding</param-name>
    		<param-value>UTF8</param-value>
    	</init-param>
    	<init-param>
    		<param-name>forceEncoding</param-name>
    		<param-value>true</param-value>
    	</init-param>
    </filter>
    <filter-mapping>
    	<filter-name>SetCharacterEncodingFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>
    

    Otra forma de hacerlo es en el metodo onSubmit que tiene como parametros los servlets de Request y Response, setear la codificación de caracteres:

    request.setCharacterEncoding("UTF-8");
    

    Pero este puede ser un poco molesto dependiendo de la cantidad de peticiones que manejamos, así que prefiero la opción del Filtro.

  2. Agregar archivos de configuración en Spring, que los que coloca Netbeans por defecto.
    Solucionamos agregando como parametros al context-param, en mi caso contenido en web.xml.

    	<context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/applicationContext.xml
                /WEB-INF/dataSourceApp.xml
            </param-value>
        </context-param>
    

    Otra forma de hacerlo es haciendo imports en el aplicationContext.xml pero segun he leido, no es una buena práctica en el uso de Spring. aqui

  3. Como tener varios botones Submit en un solo formulario e identificar cual fue pulsado.
    Para esta labor hemos de saber que cuando se hace un submit, dependiendo del navegador, los botones que no fueron pulsados pueden o no ser enviados. Pero se envian como cualquier otro componente, con su ID y su valor. Recordando esto lo unico que hice fue crear un metodo que busque que boton fue pulsado.

        private int verificaAccion(HttpServletRequest request) {
            if ("Insertar".equals(request.getParameter("Insertar"))) {
                return 0;
            } else if ("Eliminar".equals(request.getParameter("Eliminar"))) {
                return 1;
            } else if ("Modificar".equals(request.getParameter("Modificar"))) {
                return 2;
            } else if ("Buscar".equals(request.getParameter("Buscar"))) {
                return 3;
            } else if ("Listar".equals(request.getParameter("Listar"))) {
                return 4;
            }
            return -1;
        }
    

    Creo que pondre la clase completa:

    public class controladorPersona extends SimpleFormController {
    
        public controladorPersona() {
            setCommandClass(Persona.class);
            setCommandName("afe");
            setFormView("index");
        }
    
        @Override
        protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {
            List<Persona> listado=new ArrayList(1);
            String accion = "No seleccionada ";
            Persona persona = (Persona) command;
            int opcionSeleccionada = verificaAccion(request);
    
            switch (opcionSeleccionada) {
                case 0: {insertar(persona);accion = "Almacenado";break;}
                case 1: {persona=buscar(persona);eliminar(persona);accion = "Eliminado";break;}
                case 2: {modificar(persona);accion = "Modificado";break;}
                case 3: {persona=buscar(persona);accion = "Consultado";break;}
                case 4: {listado=listar();accion = "Listado";break;}
            }
    
            ModelAndView mv = new ModelAndView(getSuccessView());
    
            if(opcionSeleccionada==0 || opcionSeleccionada==1 || opcionSeleccionada==2 ){
                mv.addObject("respuestaServidor",
                    serviciosPersona.imprimeDatos(accion,
                    persona.getNombres(), persona.getApellidos(),
                    persona.getEdad()));
            }else if(opcionSeleccionada==3){
                mv.addObject("afe", persona);
            }else if(opcionSeleccionada==4){
                mv.addObject("listado",listado);
            }
            return mv;
        }
    
        private int verificaAccion(HttpServletRequest request) {
            if ("Insertar".equals(request.getParameter("Insertar"))) {
                return 0;
            } else if ("Eliminar".equals(request.getParameter("Eliminar"))) {
                return 1;
            } else if ("Modificar".equals(request.getParameter("Modificar"))) {
                return 2;
            } else if ("Buscar".equals(request.getParameter("Buscar"))) {
                return 3;
            } else if ("Listar".equals(request.getParameter("Listar"))) {
                return 4;
            }
            return -1;
        }
    
        private void insertar(Persona persona) {
            setSuccessView("respuesta");
            personaSpringDAO.create(persona);
        }
    
        private void eliminar(Persona persona) {
            setSuccessView("respuesta");
            personaSpringDAO.delete(persona.getId());
        }
    
        private void modificar(Persona persona) {
            setSuccessView("respuesta");
            personaSpringDAO.update(persona);
        }
    
        private Persona buscar(Persona persona) {
            setSuccessView("index");
            return personaSpringDAO.find(persona.getId());
        }
    
        private List<Persona> listar() {
            setSuccessView("listado");
            return (List<Persona>)personaSpringDAO.findAll();
        }
    
        public void setServiciosPersona(ServiciosPersona serviciosPersona) {
            this.serviciosPersona = serviciosPersona;
        }
    
        public void setPersonaSpringDAO(PersonaSpringDAO personaSpringDAO) {
            this.personaSpringDAO = personaSpringDAO;
        }
        private ServiciosPersona serviciosPersona;
        private PersonaSpringDAO personaSpringDAO;
    }
    
  4. El código fuente completo lo tienen http://www.mediafire.com/file/j3tclbrqdlna93m/springMiDaoCRUD.rar.

    Gracias AFE por tu compañiía y apoyo.

    Saludos a todos, espero proximamente hacer algo con  Spring WebFlow, un controlador que me servirá para hacer unos cuantos Wizards.

2 comentarios to “Spring: Ejemplo simple de CRUD a una tabla y algunos alcances adicionales”

  1. Gutenberg said

    ¡¡Gracias!!

  2. ronald said

    tienes alguno con netbeans 7

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: