2

在我的控制器中,我正在使用

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"

没有任何帮助,有什么想法吗?

4

2 回答 2

1

因此,您遇到的问题是使用 Object 作为返回类型,根据 Spring MVC 参考手册,它不会作为视图名称或ModelAndView

  • 任何其他返回类型都被认为是要暴露给视图的单个模型属性,使用 @ModelAttribute在方法级别指定的属性名称(或基于返回类型类名称的默认属性名称)。该模型隐含地丰富了命令对象和带@ModelAttribute注释的参考数据访问器方法的结果。

我猜你使用了 Spring MVC 的一些未记录/内部部分,在新版本中实现了更改。

于 2012-09-11T17:19:17.963 回答
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返回类型form()

当我将 Spring 版本更改为 3.1.2 时,它返回 404 - 它找不到 WEB-INF/jsp/dialog/form.jsp,这很奇怪。

是的,我正在使用 viewResolver

<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,现在我总是返回ModelAndView,所以我可以更改返回类型并且它可以工作。

于 2012-09-11T16:07:44.600 回答