Um guia para o ViewResolver no Spring MVC

Um guia para o ViewResolver no Spring MVC

1. Visão geral

Todas as estruturas MVC fornecem uma maneira de trabalhar com visualizações.

O Spring faz isso através dos resolvedores de visualização, que permitem renderizar modelos no navegador sem vincular a implementação a uma tecnologia de visualização específica.

Os mapasViewResolver exibem os nomes das exibições reais.

E a estrutura Spring vem com alguns resolvedores de exibição, por exemplo InternalResourceViewResolver,XmlViewResolver,ResourceBundleViewResolver e alguns outros.

Este é um tutorial simples que mostra como configurar os resolvedores de visualização ehow to use multiple ViewResolver in the same configuration mais comuns.

2. A configuração Spring Web

Vamos começar com a configuração da web; vamos anotá-lo com@EnableWebMvc,@Configuratione@ComponentScan:

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

É aqui que definiremos nosso resolvedor de visualizações na configuração.

3. Adicione umInternalResourceViewResolver

EsteViewResolver nos permite definir propriedades como prefixo ou sufixo do nome da visualização para gerar o URL final da página de visualização:

@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 # do exemplo, não precisamos de um controlador para processar a solicitação.

Precisamos apenas de uma páginajsp simples, colocada na pasta/WEB-INF/view conforme definido na configuração:


    
    
        

This is the body of the sample view

4. Adicione umResourceBundleViewResolver

Como o nome deste resolvedor sugere, umResourceBundleViewResolver usa definições de bean em umResourceBundle.

Primeiro, adicionamosResourceBundleViewResolver à configuração anterior:

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

O pacote configurável geralmente é definido em um arquivo de propriedades, localizado no caminho de classe. Abaixo está o arquivoviews.properties:

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

Podemos usar a páginajsp simples definida no exemplo acima para esta configuração também.

5. Adicione umXmlViewResolver

Esta implementação deViewResolver aceita um arquivo de configuração escrito emXML com o mesmoDTD das fábricas de feijãoXML do Spring:

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

Abaixo está o arquivo de configuração,views.xml:


    

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

6. EncadeandoViewResolvers e defina uma prioridade de pedido

Spring MVC também oferece suporte amultiple view resolvers.

Isso permite que você substitua visualizações específicas em algumas circunstâncias. Podemos simplesmente encadear resolvedores de visualização adicionando mais de um resolvedor à configuração.

Depois de fazer isso, precisaremos definir um pedido para esses resolvedores. Oorder property é usado para definir qual é a ordem das invocações na cadeia. Quanto maior a propriedade do pedido (maior número de pedidos), mais tarde o resolvedor de vistas é posicionado na cadeia.

Para definir a ordem, podemos adicionar a seguinte linha de código à configuração dos nossos resolvedores de exibição:

bean.setOrder(0);

Tenha cuidado com a prioridade do pedido, poisInternalResourceViewResolver deve ter um pedido superior - porque se destina a representar um mapeamento muito explícito. E se outros resolvedores tiverem uma ordem superior, oInternalResourceViewResolver pode nunca ser chamado.

7. Conclusão

Neste tutorial, configuramos uma resolução de cadeias de exibição usando a configuração Java. Ao jogar com a prioridade da ordem, podemos definir a ordem de sua invocação.

A implementação deste tutorial simples pode ser encontrada emgithub project - este é um projeto baseado em Eclipse, portanto, deve ser fácil de importar e executar como está.