ViewResolvers - facilitando a configuração do Spring MVC
bom, para quem não conhece o framework MVC do Spring framework, o titulo deste post não quer dizer absolutamente nada, mas view resolvers, são beans que pegam, por exemplo, a palavra: home
e traduzem isto para quem vai desenhar a tela para o usuário, como por exemplo:
- homePage.jsp
- /WEB-INF/jsps/index.jsp
- /WEB-INF/vm/home.vm
forçando um pouco, uma view, pode ser considerada como um forward do struts, e cada view resolver, usa uma tecnica diferente para definir, o que significa "home"
bom, tendo isto explicado (eu acho que ficou mais ou menos claro, se não ficou é só alguem me chingar nos comentários ali em baixo), hoje eu descobri que eu posso ter vários ViewResolvers ao mesmo tempo na minha aplicação
ta, mas para que isto serve?
por exemplo, o tipo de view default da minha aplicação é velocity, então eu posso usar a seguinte configuração:
<property name="resourceLoaderPath">
<value>/WEB-INF/vm/</value>
</property>
</bean>
<bean id="viewResolverVelocity" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass">
<value>org.rsjug.site.utils.RsjugVelocityView</value>
</property>
<property name="suffix">
<value>.vm</value>
</property>
</bean>
isto configura a engine do velocity, e diz que se eu buscar uma view com o nome de "home" o framework vai me retornar: /WEB-INF/vm/home.vm, e se eu procurar uma view com o nome de artigos/lista ele vai me retornar: /WEB-INF/vm/artigos/lista.vm
bom, até agora nada de tão divertido assim, e até pouco tempo eu achava isto até meio limitado, mas eu posso simplesmente adicionar a seguinte configuração no meu prefix-servlet.xml para melhorar um pouco a brincadeira:
<property name="cache">
<value>true</value>
</property>
<property name="order">
<value>10</value>
</property>
<property name="location">
<value>/WEB-INF/site-views.xml</value>
</property>
</bean>
e agora, dentro do arquivo site-views.xml, eu posso definir que a view com o nome de artigos/lista, é um redirect para uma página, ou então aponta para uma classe que vai me gerar um PDF utilizando os mesmos dados que eu ja ia utilizar no arquivo ".vm" para onde ele apontava antes.
ta, tudo isto é muito bonito, mas e dai, quais são os tais de viewresolvers que vem prontinhos no spring, ou sera que eu vou ter de escrever?
calma, não é bem assim, o spring ja entrega alguns prontos, mas se for necessário pode-se escrever uma classe nova de view, ou de view resolver.
como ali na declaração do: viewResolverVelocity eu setei a classe de view dele, para uma subclasse da view default para velocity do spring para eu poder setar mais alguns parametros para todos os templates (pra falar a verdade, colocar também o request no contexto do velocity, e só precisei escrever uma linha pra isto
)
mas voltando ao assunto, e pra terminar este negócio que to escrevendo e que muitos dos dois leitores devem estar perguntando: ta, e eu com isto
eu vou só listar quais são os view resolvers que vem prontos pra o uso no spring, quaisquer duvidas é só comentarem ai em baixo (sim, isto é uma campanha por comentarios, ninguem comenta nada aqui
)
a explicação do que é cada um deles, e no que eles facilitam ou dificultam a vida, pode ser encontrada nos javadocs deles
- org.springframework.web.servlet.view.BeanNameViewResolver - este é o default, caso nenhum seja especificado
- org.springframework.web.servlet.view.XmlViewResolver
- org.springframework.web.servlet.view.ResourceBundleViewResolver
- org.springframework.web.servlet.view.UrlBasedViewResolver
- org.springframework.web.servlet.view.InternalResourceViewResolver
- org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver
- org.springframework.web.servlet.view.velocity.VelocityViewResolver
ahh, esqueci de dizer, alguns deles tem o parametro order, que permite que seja especificado em que ordem eles serão consultados, mas não são todos, e como eu acho meio confuso definir uma view com o mesmo nome para dois viewresolvers diferentes, então nunca realmente precisei disto
bom, por enquanto era isto, outro dia eu posto mais alguma coisa do maravilhoso mundo do spring
Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!


