Your SlideShare is downloading. ×
0
3ra. Reunión de SpringHispano How to run Spring MVC por neodevelop
Acerca de mi... La referencia total: SpringHispano.org y grails.org.mx
Agenda <ul><li>Vista general de SpringFramework </li></ul><ul><li>El patrón de diseño MVC </li></ul><ul><li>Spring MVC </l...
SpringFramework <ul><ul><li>“ Spring es una tecnología dedicada para permitir construir aplicaciones usando POJO’s…”, Rod ...
SpringFramework Spring es un poderoso framework de aplicaciones que resuelve muchos problemas comunes en el desarrollo de ...
Vista general de SpringFramework
El patrón de diseño MVC <ul><li>MVC =  Model – View – Controller </li></ul><ul><li>Provee de un mecanismo para construir u...
El patrón de diseño MVC <ul><li>Los tres componentes que colaboran son: </li></ul><ul><ul><li>Controller(Controlador)‏ </l...
El patrón de diseño MVC
Motivaciones <ul><li>Facilita la carga de mantenimiento </li></ul><ul><ul><li>Los cambios a la lógica de negocio son menos...
Motivaciones <ul><li>Facilita el desarrollo en un equipo multidisciplinario </li></ul><ul><ul><li>Los desarrolladores pued...
Motivaciones <ul><li>Usa la mejor herramienta para tu trabajo </li></ul><ul><ul><li>Java es apropiado para crear lógica de...
Motivaciones <ul><li>Facilita las pruebas </li></ul><ul><ul><li>La lógica de navegación y de negocio están separadas de la...
Spring MVC <ul><li>Spring provee de una solución simple y eficaz para usar el patrón MVC </li></ul><ul><li>Y ahora con la ...
MVC en Spring <ul><li>Un solo servlet que maneja solicitudes a controllers individuales, con ayuda de un controller princi...
Componentes de Spring MVC <ul><li>DispatcherServlet </li></ul><ul><ul><li>La implementación del controller frontal de Spri...
Componentes de Spring MVC <ul><li>ModelAndView </li></ul><ul><ul><li>Creado por el controller </li></ul></ul><ul><ul><li>A...
Componentes de Spring MVC <ul><li>HandlerMapping </li></ul><ul><ul><li>Interface usada por el DispatcherServlet para mapea...
Funcionamiento de Spring MVC
MVC y D.I. <ul><li>Todos los componentes MVC son configurados en el AppCtx de Spring </li></ul><ul><li>Y como tal, todos l...
Configurar una App con Spring MVC
Spring MVC - DispatcherServlet <ul><li>Como muchos framework’s MVC, tambien SpringMVC es Request Driven(Manejado por Solic...
Spring MVC - DispatcherServlet <servlet> <servlet-name>springhispanoServlet</servlet-name> <servlet-class> org . springfra...
WebApplicationContext <ul><li>Cada DispatcherServlet tiene su propio ApplicationContext, a este se le denomina WebApplicat...
Elementos del WebAppCtx <ul><li>Controllers </li></ul><ul><li>Handler Mappings </li></ul><ul><li>View Resolvers </li></ul>...
Controller y AbstractController <ul><li>El tipo de Controller más simple </li></ul><ul><li>Solo requiere implementar el mé...
SimpleUrlHandlerMapping <ul><li>Es un tipo de HandlerMapping </li></ul><ul><li>Víncula directamente la URL con el controll...
InternalResourceViewResolver <ul><li>Es un tipo de ViewResolver </li></ul><ul><li>Se le debe indicar a través de un prefij...
Ahora si... Hola Mundo con SpringMVC
Más controllers… <ul><li>Controller </li></ul><ul><ul><li>AbstractController </li></ul></ul><ul><ul><ul><li>MultiActionCon...
Más Handler Mappings… <ul><li>BeanNameUrlHandlerMapping </li></ul><ul><li>SimpleUrlHandlerMapping </li></ul><ul><li>Common...
Más View Resolvers.. <ul><li>AbstractCachingViewResolver </li></ul><ul><li>XmlViewResolver </li></ul><ul><li>XsltViewResol...
Otros conceptos... <ul><li>Command: Clase que será modificada mediante un formulario, generalmente un Java Bean, es parte ...
¿Qué más provee Spring MVC? <ul><li>Spring's form tag library </li></ul><ul><li>Spring provee para las views de una librer...
Otro controller util: MultiActionController <ul><li>Un controller que maneja diferentes tareas </li></ul><ul><ul><li>Multi...
Creando un MultiActionController public   class  ReportController  extends  MultiActionController { public  ModelAndView h...
Configurando un MultiActionController <bean id= &quot;controller&quot;  class= &quot;org.springframework.samples.jasperdem...
Integración con vista  <ul><li>Spring MVC provee de la integración con otras tecnologías de vista como: </li></ul><ul><ul>...
Let's code... Veamos un ejemplo...
¿Qué más puedo hacer? <ul><li>Manejar Beans en formularios con SimpleFormController </li></ul><ul><li>Agregar lógica de “b...
¿Cómo funciona SimpleFormController? <ul><li>Su funcionamiento depende del método del request(modificable): </li></ul><ul>...
Request GET – Desplegar la forma <ul><li>formBackingObject()‏ </li></ul><ul><ul><li>Prepara y entrega el objeto Command </...
Request GET – Envío de la forma <ul><li>onBind()‏ </li></ul><ul><ul><li>Llamado después del bind pero antes de la validaci...
Request GET – Envío de la forma <ul><li>Si la validación es satisfactoria, es decir, no hay errores, entonces se llama onS...
¿Muchos métodos no? <ul><li>Veremos una forma más efectiva de hacer esto... :D </li></ul><ul><li>Afortunadamente tenemos a...
Arquitectura de Validación <ul><li>No está atada a HttpServletRequest </li></ul><ul><li>No esta atada a la capa Web </li><...
Creando un validador public   class   ClienteValidator   implements   Validator  { public   boolean  supports( Class  claz...
Configurando un validador <bean id=&quot;clienteForm&quot; class=&quot;org.springhispano.web.FormaCliente&quot;> <property...
Pero también... <ul><li>Existe un proyecto de Spring llamado  Spring Modules Validations </li></ul><ul><li>Basado en anota...
SpringMVC 2.5 <ul><li>Basados en anotaciones: </li></ul><ul><ul><li>@Controller </li></ul></ul><ul><ul><li>@RequestMapping...
@Controller <ul><li>Habilita que cierta clase declarada actue como Controller </li></ul><ul><li>No hay necesidar de hereda...
@RequestMapping <ul><li>Es usada para mapear las URL’s como por ejemplo: ‘/forma.spring’, ‘hi.form’, etc. </li></ul><ul><l...
@RequestParam <ul><li>Permite Mapear un atributo a través el método GET de la aplicación </li></ul><ul><li>Se declara por ...
@ModelAttribute <ul><li>Permite Mapear un atributo o bien un Command completo de un formulario Html </li></ul><ul><li>Tamb...
@SessionAttributes <ul><li>Lista los nombres de los atributos del modelo que deben ser almacenados en sesión </li></ul><ul...
Un ejemplo al fin... Ya era hora !!!
Resumen técnico
Más de SpringMVC <ul><li>Usar todos los HandlerMappings, ViewResolvers </li></ul><ul><li>Implementar velocity, freemarker,...
Más de SpringMVC <ul><li>Integración con: </li></ul><ul><ul><li>JSF </li></ul></ul><ul><ul><li>Struts 1.x y 2.x </li></ul>...
Referencias <ul><li>SpringHispano.org </li></ul><ul><li>SpringFramework.org </li></ul><ul><li>http://delicious.com/neodeve...
Gracias!!! Y sigamos haciendo comunidad...
Upcoming SlideShare
Loading in...5
×

Spring Mvc Final

10,000

Published on

Brief presntation about SpringMVC

Published in: Technology
1 Comment
2 Likes
Statistics
Notes
  • puedes pasar el código fuente de los ejemplos!!!
    Gracias.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
10,000
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
490
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Spring Mvc Final"

  1. 1. 3ra. Reunión de SpringHispano How to run Spring MVC por neodevelop
  2. 2. Acerca de mi... La referencia total: SpringHispano.org y grails.org.mx
  3. 3. Agenda <ul><li>Vista general de SpringFramework </li></ul><ul><li>El patrón de diseño MVC </li></ul><ul><li>Spring MVC </li></ul><ul><ul><li>Componentes </li></ul></ul><ul><ul><li>Funcionamiento </li></ul></ul><ul><ul><li>Configurar una Aplicación con Spring MVC </li></ul></ul><ul><li>Más componentes de Spring MVC </li></ul><ul><li>Más de Spring MVC... </li></ul>
  4. 4. SpringFramework <ul><ul><li>“ Spring es una tecnología dedicada para permitir construir aplicaciones usando POJO’s…”, Rod Johnson – The Server Side </li></ul></ul>
  5. 5. SpringFramework Spring es un poderoso framework de aplicaciones que resuelve muchos problemas comunes en el desarrollo de aplicaciones Java (SDK y EE).
  6. 6. Vista general de SpringFramework
  7. 7. El patrón de diseño MVC <ul><li>MVC = Model – View – Controller </li></ul><ul><li>Provee de un mecanismo para construir una delgada y limpia capa web </li></ul><ul><li>Claramente separa el negocio, la navegación y la lógica de presentación </li></ul>
  8. 8. El patrón de diseño MVC <ul><li>Los tres componentes que colaboran son: </li></ul><ul><ul><li>Controller(Controlador)‏ </li></ul></ul><ul><ul><ul><li>Maneja la lógica de navegación e interactua con la capa de servicio para la lógica de negocio </li></ul></ul></ul><ul><ul><li>Model(Modelo)‏ </li></ul></ul><ul><ul><ul><li>El contrato entre el controller y la vista </li></ul></ul></ul><ul><ul><ul><li>Contiene los datos necesarios para mostrarlos en la vista </li></ul></ul></ul><ul><ul><ul><li>Es manejado y poblado por el controller </li></ul></ul></ul><ul><ul><li>View(Vista)‏ </li></ul></ul><ul><ul><ul><li>Muestra la respuesta a la solicitud previamente hecha </li></ul></ul></ul><ul><ul><ul><li>Obtiene los datos del modelo previamente manejado por el controller </li></ul></ul></ul>
  9. 9. El patrón de diseño MVC
  10. 10. Motivaciones <ul><li>Facilita la carga de mantenimiento </li></ul><ul><ul><li>Los cambios a la lógica de negocio son menos probables de romper la lógica de la presentación </li></ul></ul><ul><ul><li>Viceversa </li></ul></ul>
  11. 11. Motivaciones <ul><li>Facilita el desarrollo en un equipo multidisciplinario </li></ul><ul><ul><li>Los desarrolladores pueden concentrarse en en crear código de negocio robusto sin tener que preocuparse por afectar la Interfaz de Usuario </li></ul></ul><ul><ul><li>Los diseñadores pueden concentrarse en construir usables y atractivas Interfaces de Usuario sin preocuparse por Java </li></ul></ul>
  12. 12. Motivaciones <ul><li>Usa la mejor herramienta para tu trabajo </li></ul><ul><ul><li>Java es apropiado para crear lógica de negocio </li></ul></ul><ul><ul><li>Los lenguajes de plantillas y etiquetado son más apropiados para crear layouts HTML. </li></ul></ul>
  13. 13. Motivaciones <ul><li>Facilita las pruebas </li></ul><ul><ul><li>La lógica de navegación y de negocio están separadas de la lógica de presentación lo que sugiere que pueden ser probadas independiemtemente. </li></ul></ul><ul><ul><li>Practicamente: podemos probar más código fuera del contendor de servlets </li></ul></ul>
  14. 14. Spring MVC <ul><li>Spring provee de una solución simple y eficaz para usar el patrón MVC </li></ul><ul><li>Y ahora con la versión 2.5 ofrece también el uso de anotaciones </li></ul><ul><li>Hay quienes dicen que es un framework de la ola anterior... </li></ul><ul><li>¿será cierto?, ya veremos ahora que SS esta dentro del JCP </li></ul>
  15. 15. MVC en Spring <ul><li>Un solo servlet que maneja solicitudes a controllers individuales, con ayuda de un controller principal. </li></ul><ul><li>El ruteo de solicitudes es completamente controlado por el Controller Frontal o principal. </li></ul><ul><ul><li>Controllers individuales pueden ser usados ara manejar varias y diferentes URL's </li></ul></ul><ul><li>Los controllers son POJO's </li></ul><ul><li>Y los controllers son manejados como cualquier otro bean de Spring en el AppCtx </li></ul>
  16. 16. Componentes de Spring MVC <ul><li>DispatcherServlet </li></ul><ul><ul><li>La implementación del controller frontal de Spring </li></ul></ul><ul><li>Controller </li></ul><ul><ul><li>Componente que maneja los request del usuario </li></ul></ul><ul><ul><li>Encapsula la lógica de navegación </li></ul></ul><ul><ul><li>Delega a los objetos de los servicios la lógica de negocio </li></ul></ul><ul><li>View </li></ul><ul><ul><li>Responsable para mostrar la salida, sea cual sea... </li></ul></ul>
  17. 17. Componentes de Spring MVC <ul><li>ModelAndView </li></ul><ul><ul><li>Creado por el controller </li></ul></ul><ul><ul><li>Almacena los datos del Modelo </li></ul></ul><ul><ul><li>Asocia una vista al Request </li></ul></ul><ul><ul><ul><li>Puede ser la implementación de una vista física o el nombre de una vista lógica </li></ul></ul></ul><ul><li>ViewResolver </li></ul><ul><ul><li>Usado para mapear nombres de vistas lógicas a implementaciones de vista actuales </li></ul></ul>
  18. 18. Componentes de Spring MVC <ul><li>HandlerMapping </li></ul><ul><ul><li>Interface usada por el DispatcherServlet para mapear los request entrantes hacia los controllers individuales </li></ul></ul>
  19. 19. Funcionamiento de Spring MVC
  20. 20. MVC y D.I. <ul><li>Todos los componentes MVC son configurados en el AppCtx de Spring </li></ul><ul><li>Y como tal, todos los componentes de Spring se benefician y pueden ser configurados usando D.I. </li></ul>
  21. 21. Configurar una App con Spring MVC
  22. 22. Spring MVC - DispatcherServlet <ul><li>Como muchos framework’s MVC, tambien SpringMVC es Request Driven(Manejado por Solicitudes)‏ </li></ul><ul><li>DispatcherServlet.- Es el servlet central que atiende todas esta solicitudes y las gestiona </li></ul><ul><li>Ofrece mucha más funcionalidad para facilitar el desarrollo </li></ul><ul><li>Esta completamente integrado con el contenedor de Spring, con todo lo que esto implica </li></ul>
  23. 23. Spring MVC - DispatcherServlet <servlet> <servlet-name>springhispanoServlet</servlet-name> <servlet-class> org . springframework .web. servlet .DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springhispanoServlet</servlet-name> <url-pattern>*. html </url-pattern> </servlet-mapping>
  24. 24. WebApplicationContext <ul><li>Cada DispatcherServlet tiene su propio ApplicationContext, a este se le denomina WebApplicationContext </li></ul><ul><li>El WebAppCtx va a contener la configuración de los elementos para que SpringMVC funcione </li></ul><ul><li>El WebAppCtx va a poder usar los beans(DAO’s, Servicios, etc.) que se declararon en el contexto de la aplicación </li></ul>
  25. 25. Elementos del WebAppCtx <ul><li>Controllers </li></ul><ul><li>Handler Mappings </li></ul><ul><li>View Resolvers </li></ul><ul><li>Locale Resolvers </li></ul><ul><li>Theme Resolver </li></ul><ul><li>Interceptors </li></ul><ul><li>Handler Exception Resolver </li></ul>
  26. 26. Controller y AbstractController <ul><li>El tipo de Controller más simple </li></ul><ul><li>Solo requiere implementar el método handlerRequestInternal()‏ </li></ul><ul><li>Le envía un ModelAndView al WebAppCtx para que determine el view y alimente con el modelo su contenido </li></ul>
  27. 27. SimpleUrlHandlerMapping <ul><li>Es un tipo de HandlerMapping </li></ul><ul><li>Víncula directamente la URL con el controller que se ejecutará </li></ul><ul><li>Se pueden usar Ant Path’s para vincular varias URL’s a un Controller </li></ul>
  28. 28. InternalResourceViewResolver <ul><li>Es un tipo de ViewResolver </li></ul><ul><li>Se le debe indicar a través de un prefijo la ubicación de los archivos de views o JSP </li></ul><ul><ul><li>Permite poner detrás de WEB-INF las JSP’s </li></ul></ul><ul><li>Se le indica con un sufijo de que tipo son las vistas que va a utilizar para mostrar </li></ul>
  29. 29. Ahora si... Hola Mundo con SpringMVC
  30. 30. Más controllers… <ul><li>Controller </li></ul><ul><ul><li>AbstractController </li></ul></ul><ul><ul><ul><li>MultiActionController </li></ul></ul></ul><ul><ul><ul><li>BaseCommandController </li></ul></ul></ul><ul><ul><ul><ul><li>AbstractCommandController </li></ul></ul></ul></ul><ul><ul><ul><ul><li>AbstractFormController </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>SimpleFormController </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>AbstractWizardFormController </li></ul></ul></ul></ul></ul><ul><ul><li>ThrowawayController </li></ul></ul><ul><ul><li>ParameterizableViewController </li></ul></ul>
  31. 31. Más Handler Mappings… <ul><li>BeanNameUrlHandlerMapping </li></ul><ul><li>SimpleUrlHandlerMapping </li></ul><ul><li>CommonsPathHandlerMapping </li></ul><ul><li>ControllerClassNameHandlerMapping </li></ul><ul><li>DefaultAnnotationHandlerMapping </li></ul>
  32. 32. Más View Resolvers.. <ul><li>AbstractCachingViewResolver </li></ul><ul><li>XmlViewResolver </li></ul><ul><li>XsltViewResolver </li></ul><ul><li>ResourceBundleViewResolver </li></ul><ul><li>UrlBasedViewResolver </li></ul><ul><li>BeanNameViewResolver </li></ul><ul><li>InternalResourceViewResolver </li></ul><ul><li>VelocityViewResolver / FreeMarkerViewResolver </li></ul>
  33. 33. Otros conceptos... <ul><li>Command: Clase que será modificada mediante un formulario, generalmente un Java Bean, es parte del Modelo </li></ul><ul><li>Bind: Es la acción de asignar los parámetros de un request a un Java Bean y vicecersa </li></ul>
  34. 34. ¿Qué más provee Spring MVC? <ul><li>Spring's form tag library </li></ul><ul><li>Spring provee para las views de una librería que ayuda a facilitar el binding de objetos de un formulario </li></ul><ul><li>Cada tag provee un conjunto de atributos correspondientes al tipo de elemento para no dejar de lado la funcionalidad </li></ul><ul><li>Solo hay que agregar la taglib al encabezado de la View: </li></ul><ul><ul><li><%@ taglib prefix=&quot;form&quot; uri=&quot;http://www.springframework.org/tags/form&quot; %> </li></ul></ul>
  35. 35. Otro controller util: MultiActionController <ul><li>Un controller que maneja diferentes tareas </li></ul><ul><ul><li>Multiples metodos para manejar </li></ul></ul><ul><ul><ul><li>Cada método maneja un request diferente </li></ul></ul></ul><ul><ul><li>MethodNameResolver determina el método </li></ul></ul><ul><ul><ul><li>Basado en un parametro o en otro criterio </li></ul></ul></ul><ul><ul><li>Los métodos regresan un ModelAndView </li></ul></ul><ul><li>Muy bueno para agrupar tareas relacionadas en una sola clase </li></ul>
  36. 36. Creando un MultiActionController public class ReportController extends MultiActionController { public ModelAndView handleSimpleReport(HttpServletRequest request, HttpServletResponse response) throws Exception { return new ModelAndView(&quot;simpleReport&quot;, getModel()); } public ModelAndView handleSimpleReportPost(HttpServletRequest request, HttpServletResponse response) throws Exception { String reportTitle = request.getParameter(&quot;reportTitle&quot;); Map model = getModel(); model.put(&quot;ReportTitle&quot;, reportTitle) ; return new ModelAndView(&quot;simpleReportCompile&quot;, model); } ...
  37. 37. Configurando un MultiActionController <bean id= &quot;controller&quot; class= &quot;org.springframework.samples.jasperdemo.web.ReportController&quot; > <property name= &quot;methodNameResolver&quot; > <ref local= &quot;resolver&quot; /> </property> </bean> <bean id= &quot;resolver&quot; class= &quot;org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver&quot; > <property name= &quot;mappings&quot; > <props> <prop key= &quot;/simpleReport.pdf&quot; >handleSimpleReport</prop> <prop key= &quot;/simpleReportPost.pdf&quot; >handleSimpleReportPost</prop> </props> </property> </bean>
  38. 38. Integración con vista <ul><li>Spring MVC provee de la integración con otras tecnologías de vista como: </li></ul><ul><ul><li>JSP & JSTL </li></ul></ul><ul><ul><li>Tiles </li></ul></ul><ul><ul><li>Velocity & Freemarker </li></ul></ul><ul><ul><li>XSLT </li></ul></ul><ul><ul><li>PDF </li></ul></ul><ul><ul><li>JasperReports </li></ul></ul>
  39. 39. Let's code... Veamos un ejemplo...
  40. 40. ¿Qué más puedo hacer? <ul><li>Manejar Beans en formularios con SimpleFormController </li></ul><ul><li>Agregar lógica de “binding” en los datos tratados desde la vista </li></ul><ul><li>Agregar lógica de desplegado de errores en la vista </li></ul><ul><li>Definir un objeto Command para la forma </li></ul><ul><li>Agregar lógica en el Submit de la forma </li></ul><ul><li>Además </li></ul><ul><ul><li>Agregar lógica de validación </li></ul></ul>
  41. 41. ¿Cómo funciona SimpleFormController? <ul><li>Su funcionamiento depende del método del request(modificable): </li></ul><ul><ul><li>GET => Implica mostrar el formulario por lo que se carga el modelo para desplegar la view indicada en un parametro denominado ‘formView’ </li></ul></ul><ul><ul><li>POST => Sucede cuando hay un envío de formulario implicado, por lo que se procede a ejecutar las acciones necesarias con el Command, y mostrar la View indicada en ’successView’ </li></ul></ul>
  42. 42. Request GET – Desplegar la forma <ul><li>formBackingObject()‏ </li></ul><ul><ul><li>Prepara y entrega el objeto Command </li></ul></ul><ul><ul><li>Permite el pre-llenado de la forma </li></ul></ul><ul><li>referenceData()‏ </li></ul><ul><ul><li>Carga los datos de referencia necesarios para desplegar la forma </li></ul></ul><ul><li>showForm()‏ </li></ul><ul><ul><li>Completa el ModelAndView y lo regresa </li></ul></ul><ul><ul><li>Poner el objeto Command en sesión si es necesario </li></ul></ul><ul><ul><li>Muestra la forma a trabajar </li></ul></ul>
  43. 43. Request GET – Envío de la forma <ul><li>onBind()‏ </li></ul><ul><ul><li>Llamado después del bind pero antes de la validación </li></ul></ul><ul><ul><li>Permite manualmente hacer el bind de los parametros del request del objeto Command antes de la validación </li></ul></ul><ul><li>formBackingObject()‏ </li></ul><ul><ul><li>Entrega el objeto Command </li></ul></ul><ul><ul><ul><li>Quizá de la sesió, o quizá de base de datos </li></ul></ul></ul><ul><li>Si la validación falla entonces se agregan los errores al ModelAndView y son mostrados en la forma </li></ul>
  44. 44. Request GET – Envío de la forma <ul><li>Si la validación es satisfactoria, es decir, no hay errores, entonces se llama onSubmit()‏ </li></ul>
  45. 45. ¿Muchos métodos no? <ul><li>Veremos una forma más efectiva de hacer esto... :D </li></ul><ul><li>Afortunadamente tenemos a Spring 2.5 con las nuevas características... </li></ul><ul><li>Pero más adelante... </li></ul>
  46. 46. Arquitectura de Validación <ul><li>No está atada a HttpServletRequest </li></ul><ul><li>No esta atada a la capa Web </li></ul><ul><ul><li>Validación de objetos de dominio </li></ul></ul><ul><ul><li>Entrada de los clientes remotos también necesita validación </li></ul></ul><ul><ul><li>Puede ser probada desde fuera del contenedor </li></ul></ul><ul><li>Implemenetación independente </li></ul><ul><li>Conversión de errores son no-fatal </li></ul>
  47. 47. Creando un validador public class ClienteValidator implements Validator { public boolean supports( Class clazz) { return Cliente . class .equals(clazz); } public void validate(Object obj, Errors errors) { //Casting del objeto Cliente cliente = ( Cliente )obj; // Validaciones ValidationUtils .rejectIfEmpty(errors, &quot;nombre&quot;, &quot;nombre.empty&quot;,&quot;El nombre no puede ir vacÂ’o...&quot;); ValidationUtils .rejectIfEmpty(errors, &quot;direccion&quot;, &quot;direccion.empty&quot;,&quot;La direccion no puede ir vacÂ’o...&quot;); ValidationUtils .rejectIfEmpty(errors, &quot;RFC&quot;, &quot;RFC.empty&quot;,&quot;El RFC no puede ir vacÂ’o...&quot;); if (cliente.getNombre().length()<=2)‏ errors.rejectValue(&quot;nombre&quot;, &quot;nombre.length&quot;, &quot;El nombre debe ser mayor de dos caracteres&quot;); } }
  48. 48. Configurando un validador <bean id=&quot;clienteForm&quot; class=&quot;org.springhispano.web.FormaCliente&quot;> <property name=&quot;formView&quot; value=&quot;editCliente&quot;/> <property name=&quot;successView&quot; value=&quot;redirect:list.htm&quot;/> <property name=&quot;service&quot; ref=&quot;service&quot;/> <property name=&quot;validator&quot; ref=&quot;clienteValidator&quot;/> </bean>
  49. 49. Pero también... <ul><li>Existe un proyecto de Spring llamado Spring Modules Validations </li></ul><ul><li>Basado en anotaciones, como: </li></ul><ul><ul><li>@NotNull </li></ul></ul><ul><ul><li>@Email </li></ul></ul><ul><ul><li>@Length </li></ul></ul><ul><ul><li>@MinLength </li></ul></ul><ul><ul><li>@MaxLength </li></ul></ul><ul><ul><li>@NotBlank </li></ul></ul><ul><ul><li>Otras más... </li></ul></ul>
  50. 50. SpringMVC 2.5 <ul><li>Basados en anotaciones: </li></ul><ul><ul><li>@Controller </li></ul></ul><ul><ul><li>@RequestMapping </li></ul></ul><ul><ul><li>@SessionAttributes </li></ul></ul><ul><ul><li>@RequestParam </li></ul></ul><ul><ul><li>@InitBinder </li></ul></ul><ul><ul><li>@ModelAttribute </li></ul></ul>
  51. 51. @Controller <ul><li>Habilita que cierta clase declarada actue como Controller </li></ul><ul><li>No hay necesidar de heredar alguna otra clase </li></ul><ul><li>El proposito básico de @Controller es actuar como estereotipo para la clase anotada </li></ul><ul><li>Para complementar la configuración nos ayudaremos de @RequestMapping </li></ul>
  52. 52. @RequestMapping <ul><li>Es usada para mapear las URL’s como por ejemplo: ‘/forma.spring’, ‘hi.form’, etc. </li></ul><ul><li>Tipicamente el tipo de nivel de la anotación mapea un request en un FormController </li></ul><ul><li>Y adicionalmente le dicta su comportamiento en base al acceso de la URL con ayuda de los metodos GET y POST </li></ul>
  53. 53. @RequestParam <ul><li>Permite Mapear un atributo a través el método GET de la aplicación </li></ul><ul><li>Se declara por lo general dentro de la firma del método como un parametro más </li></ul><ul><li>Hace el binding por sí solo </li></ul>
  54. 54. @ModelAttribute <ul><li>Permite Mapear un atributo o bien un Command completo de un formulario Html </li></ul><ul><li>Tambien permite enviar un modelo de datos al view </li></ul><ul><li>Se declara en la firma del método como un parametro más del mismo </li></ul>
  55. 55. @SessionAttributes <ul><li>Lista los nombres de los atributos del modelo que deben ser almacenados en sesión </li></ul><ul><li>Permite que dichos objetos puedan ser utilizados en request posteriores, si es el caso... </li></ul>
  56. 56. Un ejemplo al fin... Ya era hora !!!
  57. 57. Resumen técnico
  58. 58. Más de SpringMVC <ul><li>Usar todos los HandlerMappings, ViewResolvers </li></ul><ul><li>Implementar velocity, freemarker, tiles... </li></ul><ul><li>Aplicar interceptores </li></ul><ul><li>Manejar excepciones </li></ul><ul><li>Usar otros controllers </li></ul><ul><li>Internacionalización </li></ul><ul><li>Temas </li></ul><ul><li>Ajax: Dojo, Prototype, Script.aculo.us,DWR </li></ul><ul><li>BTW, si hay tiempo veamos DWR </li></ul>
  59. 59. Más de SpringMVC <ul><li>Integración con: </li></ul><ul><ul><li>JSF </li></ul></ul><ul><ul><li>Struts 1.x y 2.x </li></ul></ul><ul><ul><li>Webwork </li></ul></ul><ul><ul><li>Tapestry </li></ul></ul><ul><li>WebFlow 2(Subproyecto de Spring)‏ </li></ul><ul><li>Portlet's </li></ul><ul><li>Algunos WebServices </li></ul><ul><li>Nos gustaría mucho que alguno de ustedes propusiera y expusiera un tema... ?:)‏ </li></ul>
  60. 60. Referencias <ul><li>SpringHispano.org </li></ul><ul><li>SpringFramework.org </li></ul><ul><li>http://delicious.com/neodevelop </li></ul><ul><ul><li>Tag de Spring y Spring MVC </li></ul></ul>
  61. 61. Gracias!!! Y sigamos haciendo comunidad...
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×