Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring boot mvc如何支持多个ViewResoller(例如jsp和freemarker)_Java_Spring - Fatal编程技术网

Java spring boot mvc如何支持多个ViewResoller(例如jsp和freemarker)

Java spring boot mvc如何支持多个ViewResoller(例如jsp和freemarker),java,spring,Java,Spring,我希望我的web应用程序支持jsp和freemarker这两种模板。 我的代码如下。结果只有jsp模板OK。 我的配置有什么问题 MvcConfiguration.java @配置 @EnableWebMvc 公共类MVCConfigureAdapter扩展了WebMVCConfigureAdapter{ @豆子 公共InternalResourceViewResolver getJspViewResolver(){ InternalResourceViewResolver解析器=新的Inte

我希望我的web应用程序支持jsp和freemarker这两种模板。 我的代码如下。结果只有jsp模板OK。 我的配置有什么问题

MvcConfiguration.java
@配置
@EnableWebMvc
公共类MVCConfigureAdapter扩展了WebMVCConfigureAdapter{
@豆子
公共InternalResourceViewResolver getJspViewResolver(){
InternalResourceViewResolver解析器=新的InternalResourceViewResolver();
resolver.setPrefix(“/WEB-INF/jsp/”);
resolver.setSuffix(“.jsp”);
解析程序。设置顺序(0);
返回解析器;
}
@豆子
public FreeMarkerViewResolver getfmviewsolver(){
FreeMarkerViewResolver解析器=新的FreeMarkerViewResolver();
resolver.setCache(true);
resolver.setPrefix(“”);
分解器。设置固定装置(“ftl”);
setContentType(“text/html;charset=UTF-8”);
解析程序设置顺序(1);
返回解析器;
}
@豆子
public freemarkerconfiguer freemarkerConfig()抛出IOException、TemplateException{
FreeMarkerConfiguration工厂=新的FreeMarkerConfiguration工厂();
setTemplateLoaderPath(“类路径:模板”);
工厂设置默认编码(“UTF-8”);
FreeMarkerconfiguer结果=新建FreeMarkerconfiguer();
result.setConfiguration(factory.createConfiguration());
返回结果;
}	
@豆子
公共视图解析程序contentNegotiatingViewResolver(
ContentNegotiationManager){
列表解析程序=新的ArrayList();
add(getJspViewResolver());
add(getfmviewsolver());
ContentNegotingViewResolver解析器=新建ContentNegotingViewResolver();
分解器。SetViewResolver(分解器);
解析程序.setContentNegotiationManager(管理器);
返回解析器;
}

}
在一个链中查询
视图解析器
s,直到其中一个返回要渲染的
视图()

但是,与其他
viewsolver
实现稍有不同,它只是构造一个URL(使用
前缀
后缀
),并返回一个
视图
,该视图将把请求转发到此URL
。因此,它将*始终*返回一个
View`实例

现在,当您有多个
viewsolver
s时,请确保
internalresourceviewsolver
始终是链中的最后一个(如所述类的javadocs中所述)。如果你不这样做,而且这是第一次,你的整个链条都不会被咨询


要解决您的问题,只需切换
viewsolver
s的顺序,这样您就可以同时使用FreeMarker和JSP视图了。

在一个链中查询
viewsolver
s,直到其中一个返回
视图进行渲染()

但是,与其他
viewsolver
实现稍有不同,它只是构造一个URL(使用
前缀
后缀
),并返回一个
视图
,该视图将把请求转发到此URL
。因此,它将*始终*返回一个
View`实例

现在,当您有多个
viewsolver
s时,请确保
internalresourceviewsolver
始终是链中的最后一个(如所述类的javadocs中所述)。如果你不这样做,而且这是第一次,你的整个链条都不会被咨询


要解决您的问题,只需切换
viewsolver
s的顺序,这样您就可以同时使用FreeMarker和JSP视图。

更改视图解析器的顺序。非常感谢。但是为什么呢?原因是什么?InternalResourceViewResolver msut是最后一个吗?
FreeMarkerViewResolver
检查某个视图是否存在,如果不存在,它将返回
null
,这将导致咨询下一个视图
InternalResourceViewResolver
此视图不进行检查,并且始终返回视图(url)无论它是否存在都要渲染。因此,如果您首先拥有
InternalResourceViewResolver
,您的
FreeMarkerViewResolver
将永远不会被咨询。请更改视图解析程序的顺序。非常感谢。但是为什么呢?原因是什么?InternalResourceViewResolver msut是最后一个吗?
FreeMarkerViewResolver
检查某个视图是否存在,如果不存在,它将返回
null
,这将导致咨询下一个视图
InternalResourceViewResolver
此视图不进行检查,并且始终返回视图(url)无论它是否存在都要渲染。因此,如果您首先拥有
InternalResourceViewResolver
,您的
FreeMarkerViewResolver
将永远不会被咨询。这是一个非常好的答案(至少对那些不是这些技术专家的人来说)。然而,这个问题可能需要一些工作——你认为你可以改进它,让其他有这个问题的人更容易搜索,这样他们就能找到你的答案吗?这是一个非常好的答案(至少对那些不是这些技术专家的人来说)。然而,这个问题可能需要一些工作——你认为你可以改进它,让其他人更容易找到这个问题,这样他们就可以找到你的答案吗?