在我的控制器中我正在使用
return new ModelAndView( "redirect:new_page" );
现在我将Spring版本从3.0.6更改为3.1.2,我发现它不能用于新版本。
我的控制器定义为
@Controller
@RequestMapping(value = "/test")
public class MyController {
我尝试使用
"redirect:/new_page"
"redirect:/test/new_page"
"redirect:./new_page"
并没有任何帮助,任何想法?
答案 0 :(得分:1)
所以你遇到的问题是使用Object作为返回类型,accoring to Spring MVC reference manual不会被调度为视图名称或ModelAndView
:
- 任何其他返回类型都被视为单个模型属性 使用通过指定的属性名称公开 方法级别的
@ModelAttribute
(或默认属性名称 基于返回类型类名称)。模型隐含地丰富了 使用命令对象和@ModelAttribute
注释的结果 参考数据访问方法。
我猜你使用了Spring MVC的一些未记录的/内部部分,在新版本中实现了更改。
答案 1 :(得分:0)
我发现在Spring 3.0.6这样的控制器是可以的:
@Controller
@RequestMapping(value = "/dialog")
public class DialogController {
@RequestMapping(value = "/redirected.view")
public ModelAndView redirected() {
System.out.println( "DialogController.redirected()" );
final ModelAndView mav = new ModelAndView( "redirected" );
return mav;
}
@RequestMapping(value = "/form.view")
public Object form() {
System.out.println( "DialogController.form()" );
return createModel();
}
private ModelAndView createModel() {
final ModelAndView mav = new ModelAndView( "redirect:redirected.view" );
return mav;
}
}
注意Object
的<{1}}返回类型...
当我将Spring版本更改为3.1.2时,它返回404 - 它无法找到
form()
,这很奇怪。
是的,我正在使用viewResolver
WEB-INF/jsp/dialog/form.jsp
原始代码中的方法更复杂
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
可能这就是错误未显示的原因......
我在那里@RequestMapping(value = "/search.form", method = RequestMethod.POST)
public Object submit( @Valid @ModelAttribute("sequentialSearch") final SequentialSearchData searchObject,
final BindingResult bindingResult, final Model model, final HttpSession session ) throws Exception {
...
}
,因为我返回Object
或String
,现在我总是ModelAndView
返回,所以我可以更改返回类型并且它可以正常工作。