2013-12-05 1 views
0

Я хочу использовать thymeleaf и jsp как в одном проекте, но не в состоянии перескакивать с одного контроллера на другой.redirect не работает с thymeleaf и JSP View resolver

<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) 

Любая помощь, как перенаправить на другой контроллер или разрешить представление для редиректа?

ответ

1

Это потому, что вы объявили viewNames в обоих ваших 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 бобов. Вам нужно будет префикс этого пути с template/ или jsp/ в зависимости от того, какой ViewResolver вы хотите сделать перенаправление. У обоих есть такая возможность.

+0

добавив префикс означает, добавить шаблон/или jsp/перед перенаправлением:/mycontroller ie "template/redirect:/mycontroller" ?? –

+0

@Nauman Да, вот что это значит. –

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>