Eine Anleitung zum ViewResolver in Spring MVC

Eine Anleitung zum ViewResolver in Spring MVC

1. Überblick

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.

DasViewResolver ordnet Ansichtsnamen tatsächlichen Ansichten zu.

Und das Spring-Framework enthält eine ganze Reihe von Ansichtsauflösern, z. InternalResourceViewResolver,XmlViewResolver,ResourceBundleViewResolver und einige andere.

Dies ist ein einfaches Tutorial, das zeigt, wie die gängigsten Ansichtsauflöser undhow to use multiple ViewResolver in the same configuration eingerichtet werden.

2. Die Spring Web-Konfiguration

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

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

Hier richten wir unseren View Resolver in der Konfiguration ein.

3. Addiere einInternalResourceViewResolver

MitViewResolver können wir Eigenschaften wie Präfix oder Suffix für den Ansichtsnamen festlegen, um die endgültige URL der 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;
}

[.hps]#Forsuch simplicity # des Beispiels benötigen wir keinen Controller, um die Anforderung zu verarbeiten.

Wir benötigen nur eine einfachejsp-Seite, die im Ordner/WEB-INF/view abgelegt ist, wie in der Konfiguration definiert:


    
    
        

This is the body of the sample view

4. Addiere einResourceBundleViewResolver

Wie der Name dieses Resolvers andeutet, verwendetResourceBundleViewResolver Bean-Definitionen inResourceBundle.

Zuerst fügen wir der vorherigen KonfigurationResourceBundleViewResolver 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 ist die Dateiviews.properties:

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

Wir können die im obigen Beispiel definierte einfachejsp-Seite auch für diese Konfiguration verwenden.

5. Addiere einXmlViewResolver

Diese Implementierung vonViewResolver akzeptiert eine inXML geschriebene Konfigurationsdatei mit denselbenDTD wie dieXMLBean-Fabriken von Spring:

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

Unten ist die Konfigurationsdateiviews.xml:


    

[.hps] [result_box .short_text]#As for the previous examples [.hps]#we can use our simple jsp page defined [.hps]#previously.

6. Verketten vonViewResolvers und Definieren einer Auftragspriorität

Spring MVC unterstützt auchmultiple view resolvers.

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 dies getan haben, müssen wir eine Reihenfolge für diese Resolver definieren. Dasorder property wird verwendet, um die Reihenfolge der Aufrufe in der Kette zu definieren. Je höher die Auftragseigenschaft (größte Auftragsnummer), desto später befindet sich der View Resolver in der Kette.

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

bean.setOrder(0);

Seien Sie vorsichtig mit der Ordnungspriorität, daInternalResourceViewResolvereine höhere Ordnung haben sollten - da dies eine sehr explizite Zuordnung darstellen soll. Und wenn andere Resolver eine höhere Ordnung haben, werden dieInternalResourceViewResolver möglicherweise nie aufgerufen.

7. Fazit

In diesem Tutorial haben wir eine Reihe von View Resolvern mithilfe der Java-Konfiguration konfiguriert. Indem wir mit der Auftragspriorität spielen, können wir die Reihenfolge ihres Aufrufs festlegen.

Die Implementierung dieses einfachen Tutorials finden Sie ingithub project - dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.