gpt4 book ai didi

spring - 如何在 Spring 中使用多个 View 解析器?

转载 作者:IT老高 更新时间:2023-10-28 13:52:00 26 4
gpt4 key购买 nike

我正在开发一个 web 应用程序,我的大部分页面都使用 apache tile (2.1.2),但其中一些只需要纯 jsps。

我遇到了一个问题,即 InternalResourceViewResolverUrlBasedViewResolver 无论如何都会尝试解析 View ,因此无论我使用哪种顺序,它要么在普通 JSP 页面上失败,要么在瓦片页面上失败。

这里是配置:

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
<property name="order" value="0"/>
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="1"/>
</bean>

为了更清楚我想要做什么,我需要能够拥有这样的 View 状态:

<view-state id="someState" view="/someDir/foo"><!--render foo.jsp -->
<transition on="foo" to="bar"/>
</view-state>

<view-state id="someState" view="something.core"><!--render tile defintion named 'something.core' -->
<transition on="foo" to="bar"/>
</view-state>

有谁知道如何配置东西,以便我可以让它渲染图 block 定义和纯 jsps?

最佳答案

正如您所说,您不能将这些链接在一起。这两种情况的 javadoc 都清楚地表明它们都必须位于解析器链的末尾。

我建议,如果您确实需要将这些结合使用,那么您编写一个简单的 ViewResolver 自定义实现,它采用 View 名称,并决定委托(delegate)给您的两个“真实” View 解析器中的哪一个。这假设您可以根据 View 名称判断要调用哪个解析器。


所以你可以像这样定义一个自定义 ViewResolver:

public class MyViewResolver implements ViewResolver {

private ViewResolver tilesResolver;
private ViewResolver jspResolver;

public void setJspResolver(ViewResolver jspResolver) {
this.jspResolver = jspResolver;
}

public void setTilesResolver(ViewResolver tilesResolver) {
this.tilesResolver = tilesResolver;
}

public View resolveViewName(String viewName, Locale locale) throws Exception {
if (isTilesView(viewName)) {
return tilesResolver.resolveViewName(viewName, locale);
} else {
return jspResolver.resolveViewName(viewName, locale);
}
}

private boolean isTilesView(String viewName) {
.....
}
}

您需要实现 isTilesView 方法来决定委托(delegate)给哪个解析器。

在 XML 配置中,定义这个新的 View 解析器,并确保它出现在 其他的之前。

<bean class="MyViewResolver">
<property name="tilesResolver" ref="tilesViewResolver"/>
<property name="jspResolver" ref="viewResolver"/>
</bean>

关于spring - 如何在 Spring 中使用多个 View 解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1029193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com