Spring3 MultiActionController方法 - 处理程序解析。 MapAndView vs String

时间:2012-03-23 06:02:49

标签: java spring-mvc spring-3

首先,一点背景:

的web.xml:

我将所有/ app / *请求与我的调度员匹配:

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/app/*</url-pattern>
</servlet-mapping>

我的问题,为什么在返回String时调用/ app / import / view有效:

控制器:

public class ImportController extends MultiActionController {

    public String view(HttpServletRequest request, HttpServletResponse response) throws Exception
        return "importer.home";
    }

但不是在返回ModelAndView时:

public class ImportController extends MultiActionController {

    public ModelAndView view(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("importer.home");
        mav.addObject(new ExlFile());
        return mav;
    }

如果我们使用ModelAndView,是否有不同的命名约定?

2 个答案:

答案 0 :(得分:2)

您正在使用MultiActionController,它对方法命名约定和签名有非常严格的约束。

但是,您根本不应该使用MultiActionController,它已过时且已弃用。按照Spring手册中的说明编写控制器,即使用@Controller@RequestMapping,然后您可以获得更灵活的方法签名。

答案 1 :(得分:2)

如果您使用的是spring 3.0,那么我更喜欢使用注释。

@Controller
@RequestMapping(value  = "/app")
public class ImportController {

    @RequestMapping(value="/importer/home")
    public ModelAndView view(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("importer.home");
        mav.addObject(new ExlFile());
        return mav;
    }