En Spring MVC, ¿cómo se representa el modelo de datos junto con el código de vista para formar una página web?
Después de obtener los datos del controlador, los datos se cargan en el modelo de datos y en la vista, luego el nombre de la vista se reenvía al solucionador de vistas, el solucionador de vistas lo analiza para obtener la vista final y finalmente, el modelo de datos se representa en una vista y el resultado final se muestra al usuario.
Utilice ModelAndView para definir tipos de vistas (incluidas las vistas JSON) y utilícelo para cargar modelos de datos. ModelAndView tiene un modelo de propiedad de tipo ModelMap, que hereda de LinkedHashMaplt, ?Objectgt., por lo que puede almacenar varios modelos de datos. Por lo tanto, puede almacenar varios pares clave-valor. Para definir aún más las funciones del modelo de datos, Spring también creó la clase ExtendedModelMap, que implementa la interfaz del modelo definida por el modelo de datos y también deriva el enlace de datos basado en esta clase. - -BindAwareModelMap, la relación entre ellos se muestra en la Figura 15-12.
En los métodos de un controlador, puedes pasar ModelAndView, Model y ModelMap como parámetros. Se inicializan automáticamente cuando se ejecuta Spring MVC, por lo que puede elegir un ModelMap o un Modelo como modelo de datos. De hecho, Spring MVC crea una instancia de BindingAwareModelMap y, según la relación en la Figura 15-12, puede cambiar el modelo a ModelMap o convertir el ModelMap a un modelo mediante una conversión. Después de inicializar ModelAndView, la propiedad Model está vacía. Cuando llama a su método Después de llamar para agregar un modelo de datos, se creará automáticamente una instancia de ModelMap para guardar el modelo de datos. De esta manera, la relación entre los modelos de datos es clara. Utilicémoslo para practicar.
Listado de código 15-41: Modelo de datos de prueba @RequestMapping(value = "/getRoleByModelMap", método = RequestMethwwwscxhdzscom#ET) public ModelAndView getRoleByModelMap(@RequestParam("id") Long id, ModelMap modelMap) { // Rol rol = roleService.getRole(id);
Rol rol = new Role(id, "shooter", "Salida física remota");
ModelAndView mv = new ModelAndView ();
mv.setViewName("roleDetails");
modelMap.addAttribute("role")addAttribute("role", rol return mv;
}
@RequestMapping(value = "/getRoleByModel", método = RequestMethwww.scxhdzs.com#ET) public ModelAndView getRoleByModel(@RequestParam("id") ID larga, modelo modelo) { / / Rol rol = roleService.getRole(id);
Rol rol = new Role(id, "Archer", "Salida física remota");
ModelAndView mv = new ModelAndView(
mv.setViewName("roleDetails");
model.addAttribute("rol", rol return mv;
}
); @RequestMapping(value = "/getRoleByMv", método = RequestMethwww.scxhdzs.com#ET) public ModelAndView getRoleByMv(@RequestParam(" id") Long id, ModelAndView mv) { // Rol rol = roleService.getRole(id);
Rol rol = new Role(id, "Shooter", "Salida física remota");
mv.setViewName(" roleDetails"); .addObject("role", role); return mv;
}
En la prueba del autor, ya sea que use Model o ModelMap, es una instancia de BindingAwareModelMap, y BindingAwareModelMap es una clase que hereda ModelMap e implementa la interfaz Model, por lo que existe una función de conversión mutua.
Sin embargo, getRoleByModel y getRoleByModelMap no vinculan modelos de datos a vistas y modelos. Este paso lo vincula automáticamente Spring MVC al completar la lógica del controlador. No es necesario vincularlo y no hay código de enlace.
Ver Vista Ver es el contenido que se muestra al usuario. Antes de eso, el modelo de datos correspondiente debe obtenerse a través del controlador. Si es una vista no lógica, la vista no se ubicará a través de la vista. analizador, pero presenta directamente el modelo de datos en el lado de la vista; la vista lógica necesita analizarlo más para ubicar la vista real. Esta es la función del analizador de vistas. La vista, por otro lado, representará el modelo de datos consultado desde el controlador y lo mostrará para que el solicitante lo vea.
Hay muchas clases que implementan vistas en Spring MVC, como la vista JSTL JstlView, la vista JSON MappingJackson2JsonView, la vista PDF AbstractPdfView, etc. A través de sus métodos de representación, Spring MVC puede presentar el modelo de datos en varios tipos de vistas. . La Figura 15-13 muestra las clases de vista más utilizadas y las relaciones entre ellas. A través de estas vistas Spring?
se dividen en vistas lógicas y vistas no lógicas. Por ejemplo, MappingJack-son2JsonView es una vista no lógica. y su propósito es convertir el modelo de datos en una vista JSON y presentarlo al usuario sin mirar el nombre de la vista y luego continuar con el siguiente paso de análisis
. InternalResourceView es una vista lógica, para la cual se requiere un solucionador de vistas.