Como configurar ResourceBundleViewResolver em Spring Framework 2.0
-
01-07-2019 - |
Pergunta
Em todos os lugares que eu olho sempre a mesma explicação pop-ups.
Configurar o resolvedor vista.
<bean id="viewMappings"
class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="views" />
</bean>
E, em seguida, colocar um arquivo no classpath chamado view.properties com alguns pares chave-valor (não se importa os nomes).
logout.class=org.springframework.web.servlet.view.JstlView
logout.url=WEB-INF/jsp/logout.jsp
O que logout.class
e logout.url
média?
Como é que ResourceBundleViewResolver
usa os pares chave-valor no arquivo?
Meu objetivo é que quando alguém entra na URI myserver/myapp/logout.htm
o logout.jsp
arquivo é servido.
Solução
ResourceBundleViewResolver usa a chave / vals em views.properties para criar vista feijão (na verdade criadas em um contexto de aplicação interna). O nome do feijão vista no seu exemplo será "logout" e será um feijão do tipo JstlView. JstlView tem um atributo chamado URL que será definido como "WEB-INF / jsp / logout.jsp". Você pode definir qualquer atributo na classe de vista de uma forma similar.
O que você parece estar faltando é a sua camada de controlador / manipulador. Se você quiser /myapp/logout.htm para servir logout.jsp, você deve mapear um controlador em /myapp/logout.htm e que controlador precisa retornar o nome da visão "logout". O ResourceBundleViewResolver irá então ser consultado para um feijão de mesmo nome, e retornar a instância do JstlView.
Outras dicas
Para responder à sua logout
questão é o nome da visão obtida do objeto ModelAndView devolvido pelo controlador. Se você está tendo problemas você muitas necessidade a seguinte configuração adicional.
Você precisa adicionar um mapeamento de servlet para *.htm
em sua web.xml
:
<web-app> <servlet> <servlet-name>htm</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <oad-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>htm</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> </web-app>
E se você deseja mapear diretamente para o *.jsp
sem criar um controlador personalizado, então você precisa adicionar o seguinte feijão ao seu contexto Primavera:
<bean id="urlFilenameController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />