2012-03-23 53 views
0

首先,一些背景:Spring3 MultiActionController方法 - 处理程序解析。 MapAndView VS字符串

web.xml中:

我全部匹配/应用/ *请求我的调度员:

<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> 

我的问题,为什么在返回时调用/ 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?

+0

你使用Spring 3还是Spring 2? – Ralph 2012-03-23 08:05:09

+0

这将是春季3. – jonasespelita 2012-03-23 08:18:55

回答

2

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

但是,您根本不应该使用MultiActionController,它已经过时并且已被弃用。按照Spring手册中的描述写入控制器,即使用@Controller@RequestMapping,那么您将获得更灵活的方法签名。

+1

注释是那么。谢谢。 – jonasespelita 2012-03-23 12:36:19

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; 
    }