2011-07-07 17 views
7

He leído Spring 3 documentos sobre resolución de vistas ... Pero en mi proyecto no definí ninguna. Acabo de devolver un ModelAndView o @ResponseBody Cadena de los métodos del controlador. Supongo que hay una resolución de vista predeterminada (quizás UrlBasedViewResolver) que ya está configurada. ¿Que es eso? ¿Dónde puedo obtener información en los documentos sobre esto?¿Cuál es el resolvedor de vista Spring 3 predeterminado?

Si quiero agregar otras vistas como JsonView o XmlView (en este momento utilizo un Jsp que representa los datos, pero leo puedo evitar esto pasando directamente los objetos modelo a vistas especiales que lo harán por mí) ¿Trato con este resolvedor de vista predeterminado?

Respuesta

10

El valor predeterminado es un InternalResourceViewResolver registrado automáticamente (UrlBasedViewResolver es una superclase abstracta de esto).

Si declara su propio resolver de vista, entonces el predeterminado InternalResourceViewResolver no será utilizado. Si lo desea, puede simplemente redeclararlo como un bean explícito. Si hay varios resolvedores de vistas, se los consultarán en orden hasta que uno de ellos devuelva un objeto de vista. Sin embargo, debido a la forma en que funciona la API de servlet, InternalResourceViewResolver debe siempre ser el último solucionador de vista en la cadena.

Si su método de controlador devuelve un objeto View directamente, entonces no es necesario resolver la vista, y la vista se representará directamente. Del mismo modo, si usa @ResponseBody, se salta la resolución de vista.

+0

Siempre sabes todo sobre el hombre de primavera ... ¿eres un desarrollador de primavera? (De todos modos, gracias, te pregunto porque tengo curiosidad!) – gotch4

+8

@ gotch4: No, solo un usuario que sufría mucho :) – skaffman

+2

@skaffman, no he especificado ningún solucionador de vistas en mi {servletname} -servlet. archivo xml suponiendo "InternalResourceViewResolver" como predeterminado. Pero recibo el error 'No se encontró una asignación para la solicitud HTTP con URI [/ LMS-MVC/userList] en DispatcherServlet con el nombre 'lms'' Ahora, si configuro esta resolución de vista manualmente, funciona. ¿Puedes explicar este comportamiento? –

Cuestiones relacionadas