为什么我不能在控制器中使用它
@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:可以 不用名称解析视图 servlet中的'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)
我以前有这个工作。为什么不呢?
答案 0 :(得分:58)
试试这个,如果您已正确配置了视图解析器,它应该可以正常工作
return "redirect:/index.html";
答案 1 :(得分:25)
另请注意,redirect:
和forward:
前缀由UrlBasedViewResolver
处理,因此您需要在视图解析器中至少有一个UrlBasedViewResolver
的子类,例如{ {1}}。
答案 2 :(得分:8)
为了完成答案,Spring MVC使用viewResolver(例如,作为axtavt metionned,InternalResourceViewResolver)来获取特定视图。因此,第一步是确保配置了viewResolver。
其次,您应该注意重定向的URL(重定向或转发)。以“/”开头的url表示它是应用程序中的绝对URL。正如吉格尔所说,
return "redirect:/index.html";
应该有效。如果您的视图位于应用程序的根目录中,Spring可以找到它。如果没有“/”的网址,例如您问题中的网址,则表示网址相对。它解释了为什么它以前工作,现在不工作。如果您的页面调用“重定向”偶然位于根目录中,则可以正常工作。如果没有,Spring无法找到视图,也无法正常工作。
以下是Spring的RedirectView方法的源代码
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);
}
答案 3 :(得分:4)
尝试在dispatcher-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
答案 4 :(得分:4)
试试这个
HttpServletResponse response;
response.sendRedirect(".../webpage.xhtml");
答案 5 :(得分:2)
Axtavt的回答是正确的。
这是你的解析器应该是这样的(基于注释):
@Bean
UrlBasedViewResolver resolver(){
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
显然,您的视图目录的名称应根据您的项目而更改。
答案 6 :(得分:-2)
可以在属性文件中定义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
答案 7 :(得分:-2)
我知道这已经晚了,但你应该尝试重定向到路径而不是文件哈哈