Řekli jsme si, že detektory pohledu (instance
rozhraní ViewResolver) mají za úkol transformaci logického názvu pohledu na
konkrétní šablonu. Ukážeme si příklad definice dvojice objektů typu
ViewResolver:
<bean id="resourceBundleViewResolver"
class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="order" value="1"/>
<property name="basename" value="views"/>
</bean>
<bean id="jstlViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="2"/>
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
Logický název pohledu vrácený kontrolerem bude v
takovémto případě nejdříve zkontrolován, zda náhodou nezačíná prefixem
„redirect:“. Pokud ano, pak dojde ke
klasickému HTTP přesměrování na adresu uvedenou za
prefixem „redirect:“. V opačném
případě bude logický název předán objektu typu
ResourceBundleViewResolver a pokud ten neurčí
konkrétní šablonu pohledu, tak na řadu přijde objekt typu
InternalResourceViewResolver.
V případě definice s id
resourceBundleViewResolver definujeme vlastnost
basename, která určuje základní název pro
příslušný ResourceBundle. Konkrétní properties
soubor je vybrán na základě instance Locale
získané prostřednictvím definovaného detektoru národního prostředí
(objektu typu LocaleResolver). Například bude-li
mít aktuální Locale vnitřní hodnotu
en_US, tak nejdříve bude v classpath vyhledán
soubor views_en_US.properties. Nenachází-li se tam,
pak bude vyhledán soubor views_en.properties a
posledním článkem řetězu je defaultní
views.properties. Nalezený soubor pak obsahuje
definice tříd a URL pro logické názvy. Například
properties soubor s obsahem:
login.class=org.springframework.web.servlet.view.JstlView login.url=/WEB-INF/jsp/login.jsp logout.class=org.springframework.web.servlet.view.InternalResourceView logout.url=/WEB-INF/jsp/logout.jsp
V tomto případě je logický název login transformován na JSTL šablonu ve specifikovaném umístění a logický název logout pak na klasickou JSP šablonu (bez JSTL podpory).
Definovaný objekt s id
jstlViewResolver se naproti tomu pokusí transformovat
logický název tak, že k němu předřadí zadaný prefix a přiřadí zadaný
sufix. Existuje-li šablona ve výsledné cestě, je použita.
V přiložené vzorové aplikaci lze definici detektoru pohledu nalézt
v souboru
WEB-INF\spring\webApplicationContext-common.xml.