) 봄 부팅시 'MultiViewResover'라는 viewResover를 추가하십시오. 컨트롤러 내가 'FTL이 :/프리 마커/테스트'돌아 오면 내가 '일 :/thymeleaf/테스트'돌아 오면 다음 MultiViewResover가 /freemarker/test.ftl봄 부팅시 'MultiViewResover'라는 새 viewResover를 추가하는 방법 (봄 부팅시
을 FreeMarkerViewResolver를 사용하여 찾을 수 있습니다 다음 MultiViewResover은/프리 마커를 찾을 수 ThymeleafViewResolverand 사용 에서 /test.html
여기 Application.java
public class Application extends WebMvcConfigurerAdapter{
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.addInitializers();
app.run(args);
}
@Autowired
MultiViewResover resover;
@Bean(name = "viewResover")
public MultiViewResover getViewResolver() {
InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
internalResourceViewResolver.setViewClass(JstlView.class);
internalResourceViewResolver.setPrefix("/");
internalResourceViewResolver.setSuffix(".jsp");
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setViewClass(ThymeleafView.class);
FreeMarkerViewResolver freeMarkerViewResolver = new FreeMarkerViewResolver();
freeMarkerViewResolver.setPrefix("");
freeMarkerViewResolver.setSuffix(".ftl");
Map<String, ViewResolver> resolvers = new HashedMap();
resolvers.put("jsp",internalResourceViewResolver);
resolvers.put("th",thymeleafViewResolver);
resolvers.put("ftl",freeMarkerViewResolver);
resover.setResolvers(resolvers);
return resover;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
MultiViewResover.java
내 코드입니다
@Component
public class MultiViewResover implements ViewResolver {
private static Map<String, ViewResolver> resolvers ;
/**
* 默认视图类型为jsp视图
*/
private static final String DEFAULT_VIEW_TYPE = "jsp";
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
int n = viewName.lastIndexOf(":"); // 获取
String suffix = MultiViewResover.DEFAULT_VIEW_TYPE;
// 默认使用jsp视图
if (n != -1) {
// 有的话截取:前面的字符串 这里一般是jsp,ftl,vm,th与Map resolvers中的key匹配
suffix = viewName.substring(0, n);
// 取:后面的部分 那时真正的资源名.比如我们要使用hello.jsp 那viewName就应该是jsp:hello
viewName = viewName.substring(n+1);
}
// 根据:前面的字符串去获取托管的视图解析类对象
ViewResolver resolver = resolvers.get(suffix);
if (resolver != null)
return resolver.resolveViewName(viewName, locale);
return null;
}
public Map<String, ViewResolver> getResolvers() {
return resolvers;
}
public void setResolvers(Map<String, ViewResolver> resolvers) {
this.resolvers = resolvers;
}
}
MyController.java
@RequestMapping(value = "/test1",name = "test return th view",method = RequestMethod.GET)
public ModelAndView test1(){
return thView("login");
}
public ModelAndView thView(String viewPath){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("th:"+viewPath);
return modelAndView;
}
하지만 난이 응용 프로그램을 실행할 때 예외
Caused by: java.lang.IllegalStateException: ApplicationObjectSupport instance [or[email protected]40e94dde] does not run in an ApplicationContext
at org.springframework.context.support.ApplicationObjectSupport.getApplicationContext(ApplicationObjectSupport.java:141)
at org.springframework.web.servlet.view.UrlBasedViewResolver.applyLifecycleMethods(UrlBasedViewResolver.java:513)
at org.springframework.web.servlet.view.UrlBasedViewResolver.loadView(UrlBasedViewResolver.java:508)
at org.springframework.web.servlet.view.AbstractCachingViewResolver.createView(AbstractCachingViewResolver.java:244)
at org.springframework.web.servlet.view.UrlBasedViewResolver.createView(UrlBasedViewResolver.java:472)
at org.springframework.web.servlet.view.AbstractCachingViewResolver.resolveViewName(AbstractCachingViewResolver.java:156)
at me.luger.core.mvc.controller.MultiViewResover.resolveViewName(MultiViewResover.java:51)
at me.luger.core.mvc.controller.MultiViewResover$$FastClassBySpringCGLIB$$8118b2de.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
at me.luger.core.log.aspect.ControllerLogAspect.doAround(ControllerLogAspect.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
at me.luger.core.mvc.controller.MultiViewResover$$EnhancerBySpringCGLIB$$c7c3b2b9.resolveViewName(<generated>)
at org.springframework.web.servlet.view.ContentNegotiatingViewResolver.getCandidateViews(ContentNegotiatingViewResolver.java:299)
at org.springframework.web.servlet.view.ContentNegotiatingViewResolver.resolveViewName(ContentNegotiatingViewResolver.java:220)
at org.springframework.web.servlet.DispatcherServlet.resolveViewName(DispatcherServlet.java:1296)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1234)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
... 25 common frames omitted
감사를 던져!