TM.*_*TM. 17 spring spring-mvc spring-webflow
我正在开发一个网络应用程序,我的大部分页面都使用了apache tiles(2.1.2),但其中一些只需要简单的jsps.
我遇到的问题是a InternalResourceViewResolver和a UrlBasedViewResolver都会尝试解决视图,无论如何,所以无论我使用哪种顺序,它都会在普通的JSP页面或tile页面上失败.
这是配置:
<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>
Run Code Online (Sandbox Code Playgroud)
为了更清楚我想要做什么,我需要能够拥有这样的视图状态:
<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>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何配置东西,以便我可以让它来渲染瓷砖定义和普通的jsps?
ska*_*man 20
如你所说,你不能把它们连在一起.这两个州的javadoc显然都必须在解析器链的最后.
我建议如果你真的需要使用这些来收集,那么你编写一个简单的ViewResolver自定义实现,它接受视图名称,并决定你的两个"真正的"视图解析器中的哪一个委托给.这假设您可以根据视图名称判断要调用哪个解析程序.
所以你要定义一个这样的自定义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) {
.....
}
}
Run Code Online (Sandbox Code Playgroud)
您需要实现isTilesView方法来决定委派给哪个解析器.
在XML配置中,定义这个新的视图解析器,并确保它出现在其他视图解析器之前.
<bean class="MyViewResolver">
<property name="tilesResolver" ref="tilesViewResolver"/>
<property name="jspResolver" ref="viewResolver"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17133 次 |
| 最近记录: |