package org.springframework.data.mongodb.examples.custsvc.web; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.examples.custsvc.data.CustomerRepository; import org.springframework.data.mongodb.examples.custsvc.domain.Customer; import org.springframework.data.mongodb.examples.custsvc.domain.Survey; import org.springframework.data.mongodb.examples.custsvc.domain.SurveyInfo; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.support.SessionStatus; @Controller @RequestMapping(value = "/customer/{id}") public class ViewCustomerForm { @Autowired CustomerRepository customerRepository; @RequestMapping(method = RequestMethod.GET) public String setupForm(@PathVariable Long id, Model model) { Customer customer = customerRepository.findOne(id); Survey survey = new Survey(); model.addAttribute("customer", customer); model.addAttribute("survey", survey); return "customer/viewCustomerForm"; } @RequestMapping(method = RequestMethod.POST) @ResponseStatus(value = HttpStatus.OK) @Transactional public String processSubmit(@PathVariable Long id, @ModelAttribute("survey") Survey survey, BindingResult result, SessionStatus status) { status.setComplete(); Customer customer = customerRepository.findOne(id); if (customer.getSurveyInfo() == null) { customer.setSurveyInfo(new SurveyInfo()); } if (survey.getQuestion() != null && survey.getQuestion().trim().length() > 0) { customer.getSurveyInfo().addQuestionsAndAnswer(survey); customerRepository.save(customer); } return "redirect:/customer/" + id; } }