Eine Anleitung zum ViewResolver in Spring MVC

1. Übersicht

Alle MVC-Frameworks bieten eine Möglichkeit, mit Ansichten zu arbeiten.

Spring erledigt dies über die Ansichtsauflöser, mit denen Sie Modelle im Browser rendern können, ohne die Implementierung an eine bestimmte Ansichtstechnologie zu binden.

Der ViewResolver ordnet Ansichtsnamen tatsächlichen Ansichten zu.

Das Spring-Framework enthält einige Ansichtsauflöser, z. B. InternalResourceViewResolver , XmlViewResolver , ResourceBundleViewResolver und einige andere.

Dies ist ein einfaches Tutorial, das zeigt, wie Sie die gängigsten Ansichtsauflöser einrichten und mehrere ViewResolver in derselben Konfiguration verwenden .

2. Die Spring Web-Konfiguration

Beginnen wir mit der Webkonfiguration. Wir werden es mit @EnableWebMvc , @Configuration und @ComponentScan kommentieren :

@EnableWebMvc @Configuration @ComponentScan("com.baeldung.web") public class WebConfig implements WebMvcConfigurer { // All web configuration will go here }

Hier richten wir unseren View Resolver in der Konfiguration ein.

3. Fügen Sie einen InternalResourceViewResolver hinzu

Mit diesem ViewResolver können wir Eigenschaften wie Präfix oder Suffix für den Ansichtsnamen festlegen, um die URL der endgültigen Ansichtsseite zu generieren:

@Bean public ViewResolver internalResourceViewResolver() { InternalResourceViewResolver bean = new InternalResourceViewResolver(); bean.setViewClass(JstlView.class); bean.setPrefix("/WEB-INF/view/"); bean.setSuffix(".jsp"); return bean; }

Zur Vereinfachung des Beispiels benötigen wir keinen Controller, um die Anforderung zu verarbeiten.

Wir benötigen nur eine einfache JSP- Seite, die sich im Ordner / WEB-INF / view befindet, wie in der Konfiguration definiert:

4. Fügen Sie einen ResourceBundleViewResolver hinzu

Wie der Name dieses Resolvers andeutet, verwendet ein ResourceBundleViewResolver Bean-Definitionen in einem ResourceBundle .

Zuerst fügen wir den ResourceBundleViewResolver zur vorherigen Konfiguration hinzu:

@Bean public ViewResolver resourceBundleViewResolver() { ResourceBundleViewResolver bean = new ResourceBundleViewResolver(); bean.setBasename("views"); return bean; } 

Das Bundle wird normalerweise in einer Eigenschaftendatei definiert, die sich im Klassenpfad befindet. Unten finden Sie die Datei views.properties :

sample.(class)=org.springframework.web.servlet.view.JstlView sample.url=/WEB-INF/view/sample.jsp

Wir können die einfache JSP- Seite, die im obigen Beispiel definiert ist, auch für diese Konfiguration verwenden.

5. Fügen Sie einen XmlViewResolver hinzu

Diese Implementierung von ViewResolver akzeptiert eine in XML geschriebene Konfigurationsdatei mit derselben DTD wie die XML- Bean-Fabriken von Spring :

@Bean public ViewResolver xmlViewResolver() { XmlViewResolver bean = new XmlViewResolver(); bean.setLocation(new ClassPathResource("views.xml")); return bean; }

Unten finden Sie die Konfigurationsdatei views.xml :

Wie in den vorherigen Beispielen können wir unsere zuvor definierte einfache JSP- Seite verwenden.

6. Verketten von ViewResolvern und Definieren einer Auftragspriorität

Spring MVC unterstützt auch mehrere Ansichtsauflöser .

Auf diese Weise können Sie unter bestimmten Umständen bestimmte Ansichten überschreiben. Wir können View-Resolver einfach verketten, indem wir der Konfiguration mehr als einen Resolver hinzufügen.

Sobald wir das getan haben, müssen wir eine Reihenfolge für diese Resolver definieren. Die order- Eigenschaft wird verwendet, um die Reihenfolge der Aufrufe in der Kette zu definieren. Je höher die Auftragseigenschaft (größte Bestellnummer), desto später wird der Ansichtsauflöser in der Kette positioniert.

Um die Reihenfolge zu definieren, können wir der Konfiguration unserer View-Resolver die folgende Codezeile hinzufügen:

bean.setOrder(0);

Seien Sie vorsichtig bei der Reihenfolge der Priorität, da der InternalResourceViewResolver eine höhere Reihenfolge haben sollte, da er eine sehr explizite Zuordnung darstellen soll. Und wenn andere Resolver eine höhere Ordnung haben, wird der InternalResourceViewResolver möglicherweise nie aufgerufen.

7. Fazit

In diesem Tutorial haben wir eine Kette von Ansichtsauflösern mithilfe der Java-Konfiguration konfiguriert. Indem wir mit der Ordnungspriorität spielen, können wir die Reihenfolge ihres Aufrufs festlegen.

Die Implementierung dieses einfachen Tutorials finden Sie im Github-Projekt.