Spring MVCのViewResolverガイド
1概要
すべてのMVCフレームワークはビューを扱う方法を提供します。
Springはビューリゾルバを介してこれを行います。これにより、実装を特定のビューテクノロジに結び付けることなくブラウザでモデルをレンダリングできます。
ViewResolver
は、ビュー名を実際のビューにマッピングします。
そしてSpringフレームワークはかなりの数のビューリゾルバを持っています。
InternalResourceViewResolver
、
XmlViewResolver
、
ResourceBundleViewResolver
、その他いくつか
これは最も一般的なビューリゾルバを設定する方法と同じ設定で複数の__ViewResolverを使う方法を示す簡単なチュートリアルです。
2 Spring Webの設定
Web設定から始めましょう。それに
@ EnableWebMvc
、
@ Configuration
、および
@ ComponentScan
の注釈を付けます。
@EnableWebMvc
@Configuration
@ComponentScan("org.baeldung.web")
public class WebConfig implements WebMvcConfigurer {
//All web configuration will go here
}
ここで、ビューリゾルバを設定に設定します。
3
InternalResourceViewResolver
を追加してください
この
ViewResolver
を使用すると、ビュー名にprefixやsuffixなどのプロパティを設定して最終的なビューページのURLを生成できます。
@Bean
public ViewResolver internalResourceViewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setViewClass(JstlView.class);
bean.setPrefix("/WEB-INF/view/");
bean.setSuffix(".jsp");
return bean;
}
この例では、リクエストを処理するためにコントローラは必要ありません。
設定で定義されているように、
/WEB-INF/view
フォルダーに配置された単純な
jsp
ページのみが必要です。
<html>
<head></head>
<body>
<h1>This is the body of the sample view</h1>
</body>
</html>
4
ResourceBundleViewResolver
を追加します.
このリゾルバの名前が示すように、
ResourceBundleViewResolver
は
ResourceBundle
のBean定義を使用します。
まず、
ResourceBundleViewResolver
を前の設定に追加します。
@Bean
public ViewResolver resourceBundleViewResolver() {
ResourceBundleViewResolver bean = new ResourceBundleViewResolver();
bean.setBasename("views");
return bean;
}
バンドルは通常、クラスパスにあるプロパティファイルで定義されます。以下は
views.properties
ファイルです。
sample.(class)=org.springframework.web.servlet.view.JstlView
sample.url=/WEB-INF/view/sample.jsp
上記の例で定義した単純な
jsp
ページをこの設定にも使用できます。
5
XmlViewResolver
を追加
ViewResolver
のこの実装は、Springの
XML
beanファクトリと同じ
DTD
を持つ
XML
で書かれた設定ファイルを受け付けます。
@Bean
public ViewResolver xmlViewResolver() {
XmlViewResolver bean = new XmlViewResolver();
bean.setLocation(new ClassPathResource("views.xml"));
return bean;
}
以下は設定ファイル
views.xml
です。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<bean id="xmlConfig" class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="/WEB-INF/view/xmlSample.jsp"/>
</bean>
</beans>
** 6.
ViewResolvers
をチェーンして注文の優先順位を定義
Spring MVCは
multiple view resolver
もサポートしています。
これにより、状況によっては特定のビューを上書きできます。構成に複数のリゾルバを追加することで、単純にビューリゾルバを連鎖させることができます。
それが終わったら、これらのリゾルバの順番を定義する必要があります。
-
order
プロパティ** は、チェーン内の呼び出しの順序を定義するために使用されます。 orderプロパティ(最大注文番号)が高いほど、ビューリゾルバはチェーン内で後に配置されます。
順序を定義するために、ビューリゾルバの設定に次のコード行を追加することができます。
bean.setOrder(0);
InternalResourceViewResolver
はより高い順序を持つべきであるため、順序の優先順位に注意してください。これは非常に明示的なマッピングを表すことを意図しているからです。そして他のリゾルバがより高次を持っているなら、
InternalResourceViewResolver
は決して呼び出されないかもしれません。
7. 結論
このチュートリアルでは、Java設定を使用して一連のビューリゾルバを設定しました。優先順位を付けてプレイすることで、呼び出しの順番を設定できます。
この簡単なチュートリアルの実装はhttps://github.com/eugenp/tutorials/tree/master/spring-mvc-java[githubプロジェクト]にあります – これはEclipseベースのプロジェクトなので、簡単にできます。そのままインポートして実行します。