哪个视图将被解析,来自spring的文档代码

时间:2010-03-16 21:25:26

标签: java spring spring-mvc

所以当你去/约会时调用了get()动作,那么视图就是get.jsp(假设你正在使用.jsp,并假设你将动作名称映射到视图)?

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请求,这意味着/ G约会的HTTP GET会调用此方法。 post()有一个类似的细化,getNewForm()将HTTP方法和路径的定义合并为一个,这样就可以通过该方法处理约会/新的GET请求。

1 个答案:

答案 0 :(得分:2)

@RequestMapping - 带注释的方法可以返回各种对象,包括ViewModelMapString等等上。这些返回值由ServletHandlerMethodInvoker.getModelAndView()解释,它根据返回值构造ModelAndView个对象。

如果返回值未指定视图名称(在您的示例中,除add()以外的每个方法都不返回视图名称),则Spring将尝试自动解析视图名称。默认情况下,这由DefaultRequestToViewNameTranslator完成,{{3}}使用有关请求的信息来选择视图名称。 javadoc中的示例是:

  • http://localhost:8080/gamecast/display.html - &gt; display
  • http://localhost:8080/gamecast/displayShoppingCart.html - &gt; displayShoppingCart
  • http://localhost:8080/gamecast/admin/index.html - &gt; admin/index

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