重定向不使用thymeleaf和JSP View解析器

时间:2013-12-05 10:08:59

标签: jsp spring-mvc redirect view thymeleaf

我想在同一个项目中使用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)

任何帮助如何重定向到另一个控制器或解析视图以进行重定向?

2 个答案:

答案 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。两者都有这种能力。