简体   繁体   English

Spring3 MultiActionController方法-处理程序解析。 MapAndView与字符串

[英]Spring3 MultiActionController method - handler resolve. MapAndView vs String

First, a bit of context: 首先,一些上下文:

web.xml: web.xml中:

I match all /app/* requests to my dispatcher: 我将所有/ 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>

My question, why does calling /app/import/view work when returning String: 我的问题,为什么返回String时调用/ app / import / view可以工作:

Controller: 控制器:

public class ImportController extends MultiActionController {

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

but NOT when returning ModelAndView: 但是在返回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;
    }

Is there a different naming convention if we use ModelAndView? 如果使用ModelAndView,是否有其他命名约定?

You're using MultiActionController , which has very strict constraints on method naming conventions and signatures. 您正在使用MultiActionController ,它对方法命名约定和签名有非常严格的限制。

However, you shouldn't be using MultiActionController at all, it's obsolete and deprecated. 但是,您根本不应该使用MultiActionController ,因为它已过时且已过时。 Write controllers as described in the Spring manual, ie using @Controller and @RequestMapping , then you get much more flexible method signatures. 按照Spring手册中的描述编写控制器,即使用@Controller@RequestMapping ,那么您将获得更加灵活的方法签名。

If you are using spring 3.0, then i will prefer to use annotation. 如果您使用的是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;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM