我一直在尝试使用UrlBasedViewResolver渲染切片视图数小时。任何人都可以告诉我它是如何完成的。我一般都想尝试解决这个问题
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"></property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
<property name="order" value="1"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="views"/>
<property name="order" value="0"/>
</bean>
在我的views.properties文件中,我将拥有其他视图路径,这些路径将由jstlView呈现。这是它给出的例外
javax.servlet.ServletException: Could not resolve view with name 'welcome' in servlet with name 'epub'
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1042)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
这不会起作用。它说它无法渲染视图。我知道这不是因为链接2个视图解析器而不是因为tile conf。因为当我在view.properties文件中定义tile的视图类时,它会起作用。所以我假设urlbasedviewresolver和tilesview无法在某些方面协同工作。我将有很多平铺布局,所以在我的属性文件中定义所有它们并不是很漂亮。(我将有很少的常规jsp页面,所以可以使用resourceBundleViewResolver)任何想法?
答案 0 :(得分:2)
这就是你需要设置Tiles(我想你正在使用Tiles 2)
1º步
定义TilesConfigurer
<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<!--Set up your Tiles definition RIGHT HERE-->
<value>/WEB-INF/defs/general.xml</value>
</list>
</property>
</bean>
2º步
设置视图解析器(您可以使用UrlBasedViewResolver或ResourceBundleViewResolver)。但请记住,您是否使用UrlBasedViewResolver,Spring 不允许您使用其他UrlBasedViewResolver子类,例如InternalResourceView,VelocityView和FreeMarkerView。
无论
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<!--Tiles IS NOT JSP-->
<!--So you can not use JSP stuffs like .jsp suffix-->
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
</bean>
或者
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<!--views.properties is located in The root of the classpath-->
<property name="basename" value="views"/>
</bean>
这里有一段view.properties
代码#You MUST SET UP each Target view class
welcome.(class)=org.springframework.web.servlet.view.tiles2.TilesView
#url MUST MATCH Tiles definition
welcome.url=welcome