Подтвердить что ты не робот

Перенаправить в Spring MVC

Почему я не могу заставить это работать в моем контроллере

@RequestMapping(method = RequestMethod.POST)
public String onSubmit(
    Model model,
    @ModelAttribute("form") Form form,
    BindingResult result, HttpServletRequest request)
    throws IOException, WriteException, BiffException {

    if (result.hasErrors()) {
        return "redirect:index.html";
    }

 }

Я получаю

javax.servlet.ServletException: возможно не разрешать просмотр с именем 'redirect: index.html' в сервлет с имя "диспетчер"
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:644)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

У меня есть это, чтобы работать раньше. Почему не сейчас?

4b9b3361

Ответ 1

Попробуйте, это должно сработать, если вы правильно настроили свой распознаватель изображения

 return "redirect:/index.html";

Ответ 2

Также обратите внимание, что префиксы redirect: и forward: обрабатываются UrlBasedViewResolver, поэтому вам нужно иметь хотя бы один подкласс UrlBasedViewResolver среди ваших разрешений вида, например InternalResourceViewResolver.

Ответ 3

Для завершения ответов Spring MVC использует viewResolver (например, как axtavt metionned, InternalResourceViewResolver), чтобы получить конкретное представление. Поэтому первый шаг - убедиться, что настроен viewResolver.

Во-вторых, вы должны обратить внимание на URL-адрес перенаправления (перенаправление или переадресация). URL-адрес, начинающийся с "/", означает, что он является абсолютным в приложении. Как говорит Джигар,

return "redirect:/index.html";  

должен работать. Если ваше представление находится в корневом каталоге приложения, Spring может его найти. Если url без "/", например, в вашем вопросе, это означает относительный URL. Это объясняет, почему он работал раньше и не работает сейчас. Если ваша страница, называющая "перенаправление", находится в корне случайно, она работает. Если нет, Spring не может найти представление, и оно не работает.

Вот исходный код метода RedirectView Spring

protected void renderMergedOutputModel(  
Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)  
throws IOException {  
  // Prepare target URL.  
  StringBuilder targetUrl = new StringBuilder();  
  if (this.contextRelative && getUrl().startsWith("/")) {  
    // Do not apply context path to relative URLs.  
    targetUrl.append(request.getContextPath());  
  }  
  targetUrl.append(getUrl());  

  // ...  

  sendRedirect(request, response, targetUrl.toString(), this.http10Compatible);  
}  

Ответ 4

попробуйте изменить это в вашем диспетчере-servlet.xml

<!-- Your View Resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
    <property name="basenames" value="views" />
    <property name="order" value="1" />
</bean>   
<!-- UrlBasedViewResolver to Handle Redirects & Forward -->
<bean id="urlViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
    <property name="order" value="2" />
</bean>        

Что происходит, здесь четко объясняется http://projects.nigelsim.org/wiki/RedirectWithSpringWebMvc

Ответ 5

Попробуйте это

HttpServletResponse response;       
response.sendRedirect(".../webpage.xhtml");

Ответ 6

Ответ Axtavt правильный.

Вот как выглядит ваш резольвер (основываясь на аннотациях):

    @Bean
UrlBasedViewResolver resolver(){
    UrlBasedViewResolver resolver = new UrlBasedViewResolver();

    resolver.setPrefix("/views/");
    resolver.setSuffix(".jsp");
    resolver.setViewClass(JstlView.class);

    return resolver;
}

Очевидно, что имя вашего каталога представлений должно изменяться в зависимости от вашего проекта.

Ответ 7

В файле свойств можно определить urlBasedViewResolver:

excel.(class)=fi.utu.seurantaraporttisuodatin.service.Raportti  
index.(class)=org.springframework.web.servlet.view.urlBasedView  
index.viewClass =org.springframework.web.servlet.view.JstlView  
index.prefix = /WEB-INF/jsp/  
index.suffix =.jsp