2016-08-06 2 views
1

My ViewResolver работает не так, как ожидалось. У меня есть несколько контроллеров для обработки разных запросов. Ниже приведены фрагменты кода:ViewResolver не работает должным образом весной 4

AppConfig класс

package in.andonsystem.config; 

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@Configuration 
@ComponentScan(basePackages = {"in.andonsystem"}) 
public class AppConfig extends WebMvcConfigurerAdapter{ 

} 

DispatcherConfig класс:

package in.andonsystem.config; 

import org.springframework.context.MessageSource; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.support.ResourceBundleMessageSource; 
import org.springframework.web.servlet.ViewResolver; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 
import org.springframework.web.servlet.view.JstlView; 

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = {"in.andonsystem.controllers"}) 
public class DispatcherConfig extends WebMvcConfigurerAdapter{ 
    @Bean 
    public ViewResolver viewResolver(){ 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setViewClass(JstlView.class); 
     viewResolver.setPrefix("WEB-INF/views/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    } 

    @Bean 
    public MessageSource messageSource(){ 
     ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); 
     messageSource.setBasename("messages");  
     return messageSource; 
    } 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/static/**").addResourceLocations("/static/"); 
    } 
} 

AppInitializer Класс

package in.andonsystem.config; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRegistration; 
import org.springframework.web.WebApplicationInitializer; 
import org.springframework.web.context.ContextLoaderListener; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.springframework.web.servlet.DispatcherServlet; 

public class AppInitializer implements WebApplicationInitializer{ 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     // Create the 'root' Spring application context 
     AnnotationConfigWebApplicationContext rootContext = 
     new AnnotationConfigWebApplicationContext(); 
     rootContext.register(AppConfig.class); 

     // Manage the lifecycle of the root application context 
     servletContext.addListener(new ContextLoaderListener(rootContext)); 
     servletContext.addListener(ContextListener.class); 

     // Create the dispatcher servlet's Spring application context 
     AnnotationConfigWebApplicationContext dispatcherContext = 
     new AnnotationConfigWebApplicationContext(); 
     dispatcherContext.register(DispatcherConfig.class); 

     // Register and map the dispatcher servlet 
     ServletRegistration.Dynamic dispatcher = 
     servletContext.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/"); 
    } 
} 

MiscController Класс

package in.andonsystem.controllers; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class MiscController { 

    @RequestMapping("/") 
    public String index(){ 
     return "index"; 
    } 
} 

SectionController Класс

package in.andonsystem.controllers; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
@RequestMapping("/section") 
public class SectionController { 

    @RequestMapping(name = "/show",method = RequestMethod.GET) 
    public String showSection(){ 
     System.out.println("Section"); 
     return "section"; 
    } 

} 

Проблема, которую я облицовкой Когда я получить доступ к URL {context path}/section/show Это перенаправляется showSection() метод SectionController, «Раздел» печатается на стандартный вывод, а затем направляет {root context}/section/WEB-INF/views/section.jsp вместо {root context}/WEB-INF/views/section.jsp

Что мне не хватает?

Заранее спасибо.

ответ

0

Я думаю, что это должно быть

viewResolver.setPrefix("/WEB-INF/views/"); 

иначе вперед относительно запроса URL.

Смежные вопросы