diff --git a/src/main/java/info/ahlberg/spring/controller/ContactController.java b/src/main/java/info/ahlberg/spring/controller/ContactController.java index 3960893..ba851b2 100755 --- a/src/main/java/info/ahlberg/spring/controller/ContactController.java +++ b/src/main/java/info/ahlberg/spring/controller/ContactController.java @@ -1,14 +1,19 @@ package info.ahlberg.spring.controller; -import java.util.List; - import info.ahlberg.spring.domain.Contact; import info.ahlberg.spring.service.ContactService; +import java.beans.PropertyEditorSupport; +import java.util.List; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +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.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @@ -18,28 +23,64 @@ public class ContactController { @Autowired private ContactService contactService; + @InitBinder + public void initBinder(WebDataBinder binder) { + binder.registerCustomEditor(Contact.class, new PropertyEditorSupport() { + @Override + public void setAsText(String text) throws IllegalArgumentException { + Long id = Long.parseLong(text); + setValue(contactService.findById(id)); + } + }); + } + @RequestMapping("/") String index(Model model) { - model.addAttribute("msg", "A nice message"); - model.addAttribute("contacts", contactService.findAll()); return "index"; } @RequestMapping("/contacts") - @ResponseBody List contacts(Model model) { + public @ResponseBody List contacts(Model model) { return contactService.findAll(); } - @RequestMapping("/add") - String add(@RequestParam String name, Model model) { - model.addAttribute("msg", "A nice message"); + @RequestMapping(value="/add", method = RequestMethod.GET) + public String addContact(Model model) { + model.addAttribute("contact", new Contact()); + return "contact"; + } + + @RequestMapping(value="/contact/{contact}", method = RequestMethod.GET) + public String showContact(@PathVariable("contact") Contact contact, Model model) { + model.addAttribute("contact", contact); + + return "contact"; + } + + @RequestMapping(value="/contact/{contact}", method = RequestMethod.POST) + public String updateContact(@PathVariable("contact") Contact originalContact, Contact contact, Model model) { + originalContact.setFirstName(contact.getFirstName()); + originalContact.setLastName(contact.getLastName()); + + model.addAttribute("contact", originalContact); + + contactService.update(originalContact); + + return "contact"; + } + + @RequestMapping(value="/add", method = RequestMethod.POST) + public String add(@RequestParam String firstName, @RequestParam String lastName, Model model) { Contact contact = new Contact(); - contact.setName(name); + contact.setFirstName(firstName); + contact.setLastName(lastName); contactService.save(contact); + model.addAttribute("msg", "Contact added"); + model.addAttribute("contacts", contactService.findAll()); return "index"; diff --git a/src/main/java/info/ahlberg/spring/domain/Contact.java b/src/main/java/info/ahlberg/spring/domain/Contact.java index d506bde..e58075d 100755 --- a/src/main/java/info/ahlberg/spring/domain/Contact.java +++ b/src/main/java/info/ahlberg/spring/domain/Contact.java @@ -21,7 +21,10 @@ public class Contact implements Serializable { private Long version; @Column(nullable = false) - private String name; + private String firstName; + + @Column(nullable = false) + private String lastName; public Long getId() { return id; @@ -39,12 +42,20 @@ public class Contact implements Serializable { this.version = version; } - public String getName() { - return name; + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; } - public void setName(String name) { - this.name = name; + public void setLastName(String lastName) { + this.lastName = lastName; } } diff --git a/src/main/java/info/ahlberg/spring/service/ContactService.java b/src/main/java/info/ahlberg/spring/service/ContactService.java index 0bd54ab..16a07d0 100755 --- a/src/main/java/info/ahlberg/spring/service/ContactService.java +++ b/src/main/java/info/ahlberg/spring/service/ContactService.java @@ -8,6 +8,10 @@ public interface ContactService { List findAll(); + Contact findById(Long id); + void save(Contact contact); + void update(Contact contact); + } diff --git a/src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java b/src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java index 3326df6..5413053 100755 --- a/src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java +++ b/src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java @@ -25,4 +25,15 @@ public class ContactServiceImpl implements ContactService { contactDAO.persist(contact); } + @Override + @Transactional + public void update(Contact contact) { + contactDAO.update(contact); + } + + @Override + public Contact findById(Long id) { + return contactDAO.loadById(id); + } + } diff --git a/src/main/webapp/WEB-INF/view/contact.jsp b/src/main/webapp/WEB-INF/view/contact.jsp new file mode 100755 index 0000000..fa43ebb --- /dev/null +++ b/src/main/webapp/WEB-INF/view/contact.jsp @@ -0,0 +1,35 @@ + + + + + + + + + + + + Spring MVC example + + + + +
+ +
+ +
+ + First name:
+ Last name:
+ +
+
+ + + +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/index.jsp b/src/main/webapp/WEB-INF/view/index.jsp index 3bffc51..1078bb0 100755 --- a/src/main/webapp/WEB-INF/view/index.jsp +++ b/src/main/webapp/WEB-INF/view/index.jsp @@ -19,23 +19,21 @@
- - - +
-
    - - - -
  • - -
    - + + +
  • +   +
  • +
+ +Add contact