1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package net.sourceforge.mystique.application;
22
23 import net.sourceforge.mystique.domain.entity.Ticket;
24 import net.sourceforge.mystique.domain.repository.RepositoryException;
25 import net.sourceforge.mystique.domain.repository.TicketRepository;
26 import net.sourceforge.mystique.infrastructure.validation.TicketValidator;
27
28 import org.springframework.beans.factory.annotation.Autowired;
29 import org.springframework.stereotype.Controller;
30 import org.springframework.ui.Model;
31 import org.springframework.validation.BindingResult;
32 import org.springframework.validation.ValidationUtils;
33 import org.springframework.web.bind.WebDataBinder;
34 import org.springframework.web.bind.annotation.InitBinder;
35 import org.springframework.web.bind.annotation.ModelAttribute;
36 import org.springframework.web.bind.annotation.RequestMapping;
37 import org.springframework.web.bind.annotation.RequestMethod;
38 import org.springframework.web.bind.annotation.RequestParam;
39 import org.springframework.web.bind.annotation.SessionAttributes;
40 import org.springframework.web.bind.support.SessionStatus;
41
42
43
44
45 @Controller
46 @RequestMapping("/ticket/edit.xhtml")
47 @SessionAttributes(types = Ticket.class)
48 public class EditTicketForm {
49
50 @Autowired
51 private TicketRepository ticketRepository;
52
53 @InitBinder
54 public void setAllowedFields(WebDataBinder binder) {
55
56 binder.setDisallowedFields(new String[] { "id" });
57
58 }
59
60 @RequestMapping(method = RequestMethod.GET)
61 public String setupForm(@RequestParam("ticketId") Long ticketId, Model model) throws RepositoryException {
62
63 Ticket ticket = ticketRepository.findById(ticketId);
64 model.addAttribute(ticket);
65
66 return "ticket.form";
67
68 }
69
70 @RequestMapping(method = RequestMethod.POST)
71
72 public String processSubmit(@ModelAttribute Ticket ticket, BindingResult result, SessionStatus status)
73 throws RepositoryException {
74
75 ValidationUtils.invokeValidator(new TicketValidator(), ticket, result);
76 if (result.hasErrors()) {
77 return "ticket.form";
78 }
79
80 ticketRepository.store(ticket);
81 status.setComplete();
82
83 return "redirect:list.xhtml";
84
85 }
86
87 }