我想在同一个项目中使用thymeleaf和jsp,但无法从一个控制器跳到另一个控制器。
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="viewNames" value="jsp/*" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<beans:bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".html" />
<beans:property name="templateMode" value="HTML5" />
<beans:property name="cacheable" value="true" />
</beans:bean>
<beans:bean id="templateEngine"
class="org.thymeleaf.spring3.SpringTemplateEngine">
<beans:property name="templateResolver" ref="templateResolver" />
</beans:bean>
<beans:bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
<beans:property name="templateEngine" ref="templateEngine" />
<beans:property name="viewNames" value="template/*" />
</beans:bean>
使用简单的代码
return "redirect:/mycontroller";
错误是
Could not resolve view with name 'redirect:/mycontroller' in servlet with name 'appServlet'
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1190)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
任何帮助如何重定向到另一个控制器或解析视图以进行重定向?
答案 0 :(得分:4)
使用此格式的重定向对我不起作用:
template/redirect:/mycontroller
jsp/redirect:/somepage.jsp
我只是用
定义了另一个视图解析器viewNames as redirect*
处理重定向,如下所示:
<beans:bean id="templateEngine"
class="org.thymeleaf.spring4.SpringTemplateEngine">
<beans:property name="templateResolver" ref="templateResolver" />
</beans:bean>
<beans:bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<beans:property name="templateEngine" ref="templateEngine" />
<beans:property name="viewNames" value="thymeleaf/*" />
</beans:bean>
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="viewNames" value="jsp/*" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="viewNames" value="redirect*" />
</beans:bean>
答案 1 :(得分:1)
那是因为您在viewNames
bean
ViewResolver
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="viewNames" value="jsp/*" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<beans:bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
<beans:property name="templateEngine" ref="templateEngine" />
<beans:property name="viewNames" value="template/*" />
</beans:bean>
viewNames
属性for Thymeleaf for example,陈述
返回将应用于确定是否的名称模式集 控制器返回的视图名称将由此解析程序解析 或不。 [...]另请注意,将检查这些视图名称模式 之前将任何前缀或后缀应用于视图名称,因此不应包含这些前缀或后缀。
因此,
"redirect:/mycontroller"
两个ViewResolver
bean中的任何一个都不会解析。您需要使用template/
或jsp/
为该路径添加前缀,具体取决于您要进行重定向的ViewResolver
。两者都有这种能力。