@RequestMapping(method = RequestMethod.POST)
	public String submitForm(HttpServletRequest request,
			HttpServletResponse response,
			@ModelAttribute("reservation") PeriodicReservation reservation,
			BindingResult result, SessionStatus status,
			@RequestParam("_page") int currentPage, Model model) {
		Map pageForms = new HashMap();
		pageForms.put(0, "reservationCourtForm");
		pageForms.put(1, "reservationTimeForm");
		pageForms.put(2, "reservationPlayerForm");
		if (request.getParameter("_cancel") != null) {
			// Return to current page view, since user clicked cancel
			return (String) pageForms.get(currentPage);
		} else if (request.getParameter("_finish") != null) {

			new PeriodicReservationValidator().validate(reservation, result);
			if (!result.hasErrors()) {
				reservationService.makePeriodic(reservation);
				status.setComplete();
				return "redirect:reservationSuccess";
			} else {
				// Errors
				return (String) pageForms.get(currentPage);
			}

		} else {
			// User clicked Next or Previous(_target)
			// Extract target page
			int targetPage = WebUtils.getTargetPage(request, "_target",
					currentPage);
			// If targetPage is lesser than current page, user clicked
			// 'Previous'
			if (targetPage < currentPage) {
				return (String) pageForms.get(targetPage);
			}
			// User clicked next
			// Validate data based on page
			switch (currentPage) {
			case 0:
				new PeriodicReservationValidator().validateCourt(reservation,
						result);
				break;
			case 1:
				new PeriodicReservationValidator().validateTime(reservation,
						result);
				break;
			case 2:
				new PeriodicReservationValidator().validatePlayer(reservation,
						result);
				break;
			}
			if (!result.hasErrors()) {
				// No errors, return target page
				return (String) pageForms.get(targetPage);
			} else {
				// Errors, return current page
				return (String) pageForms.get(currentPage);
			}
		}
	}