2010-03-16 24 views
1

所以当你去/约会时调用get()动作,那么视图就是get.jsp(假设你正在使用.jsp,并假设你正在映射动作名称视图)?哪个视图将被解析,来自spring文档的代码

那么getnewform呢?它似乎正在返回一个对象?这基本上是通过视图?

@Controller @RequestMapping("/appointments") public class AppointmentsController { 

private final AppointmentBook appointmentBook; 

@Autowired 
public AppointmentsController(AppointmentBook appointmentBook) { 
    this.appointmentBook = appointmentBook; 
} 

@RequestMapping(method = RequestMethod.GET) 
public Map<String, Appointment> get() { 
    return appointmentBook.getAppointmentsForToday(); 
} 

@RequestMapping(value="/{day}", method = RequestMethod.GET) 
public Map<String, Appointment> getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) { 
    return appointmentBook.getAppointmentsForDay(day); 
} 

@RequestMapping(value="/new", method = RequestMethod.GET) 
public AppointmentForm getNewForm() { 
    return new AppointmentForm(); 
} 

@RequestMapping(method = RequestMethod.POST) 
public String add(@Valid AppointmentForm appointment, BindingResult result) { 
    if (result.hasErrors()) { 
     return "appointments/new"; 
    } 
    appointmentBook.addAppointment(appointment); 
    return "redirect:/appointments"; 
} } 

在此示例中,@RequestMapping用于许多地方。第一种用法是在类型(类)级别上,这表明此控制器上的所有处理方法都与/约会路径有关。 get()方法还有一个@RequestMapping细化:它​​只接受GET请求,这意味着/约会的HTTP GET调用此方法。 post()具有类似的细化,getNewForm()将HTTP方法和路径的定义合并为一个,以便约会/新的GET请求由该方法处理。

回答

2

@RequestMapping -annotated方法可以返回各种各样的目的,包括一个View,一个Model,一个Map,一个String,等等。这些返回值由ServletHandlerMethodInvoker.getModelAndView()解释,它根据返回值构建一个ModelAndView对象。

如果返回值没有指定视图名称(在您的示例中,除add()之外的其他方法均不返回视图名称),则Spring将尝试自动解析视图名称。默认情况下,这由DefaultRequestToViewNameTranslator完成,它使用有关请求的信息来选择视图名称。在Javadoc的例子是:

  • http://localhost:8080/gamecast/display.html - >display
  • http://localhost:8080/gamecast/displayShoppingCart.html - >displayShoppingCart
  • http://localhost:8080/gamecast/admin/index.html - >admin/index

注意,所选择的视图名时不中的信息基于@RequestMapping方法,但请求本身的属性。

+0

因此,对新的AppointmentForm()的调用将解析为视图,并将AppointmentForm作为属性/模型传递给视图? – Blankman 2010-03-17 16:46:09

+0

@Blankman:正确 – skaffman 2010-03-17 23:37:42