使用Spring MVC 3.1.2重定向

时间:2012-09-11 14:13:18

标签: java spring spring-mvc

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

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"

并没有任何帮助,任何想法?

2 个答案:

答案 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 { ... } ,因为我返回ObjectString,现在我总是ModelAndView返回,所以我可以更改返回类型并且它可以正常工作。