Come configurare ResourceBundleViewResolver in Spring Framework 2.0
-
01-07-2019 - |
Domanda
Ovunque guardo sempre la stessa spiegazione pop-up.
Configura il risolutore di viste.
<bean id="viewMappings"
class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="views" />
</bean>
E quindi inserisci un file nel percorso di classe denominato view.properties con alcune coppie chiave-valore (non preoccuparti dei nomi).
logout.class=org.springframework.web.servlet.view.JstlView
logout.url=WEB-INF/jsp/logout.jsp
Cosa significano logout.class
e logout.url
?
In che modo ResourceBundleViewResolver
utilizza le coppie chiave-valore nel file?
Il mio obiettivo è che quando qualcuno entra nell'URI myserver / myapp / logout.htm
il file logout.jsp
viene servito.
Soluzione
ResourceBundleViewResolver utilizza la chiave / vals in views.properties per creare bean di visualizzazione (effettivamente creati in un contesto interno dell'applicazione). Il nome del bean di visualizzazione nel tuo esempio sarà " logout " e sarà un bean di tipo JstlView. JstlView ha un attributo chiamato URL che sarà impostato su " WEB-INF / jsp / logout.jsp " ;. Puoi impostare qualsiasi attributo sulla classe di visualizzazione in modo simile.
Ciò che sembra mancare è il livello del controller / gestore. Se vuoi che /myapp/logout.htm serva logout.jsp, devi mappare un controller in /myapp/logout.htm e quel controller deve restituire il nome della vista " logout " ;. ResourceBundleViewResolver verrà quindi consultato per un bean con quel nome e restituirà l'istanza di JstlView.
Altri suggerimenti
Per rispondere alla tua domanda logout
è il nome della vista ottenuto dall'oggetto ModelAndView restituito dal controller. Se riscontri problemi, molti hanno bisogno della seguente configurazione aggiuntiva.
Devi aggiungere un mapping servlet per * .htm
nel tuo 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 si desidera eseguire il mapping direttamente al * .jsp
senza creare un controller personalizzato, è necessario aggiungere il seguente bean al proprio contesto Spring:
<bean id="urlFilenameController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />