Spring MVC Example

Spring MVC Example Commit Details

Date:2011-09-26 18:38:17 (14 years 6 months ago)
Author:Michael Ahlberg
Branch:master
Commit:34fc5d4b2286dc3c8f3e5603a6459cc4021d5a43
Parents: 6b5908944d5e758e7f03c6320edf681cb6bc8e5c
Message:Added id to contact binder and update function

Changes:
Asrc/main/webapp/WEB-INF/view/contact.jsp (full)
Msrc/main/java/info/ahlberg/spring/controller/ContactController.java (2 diffs)
Msrc/main/java/info/ahlberg/spring/domain/Contact.java (2 diffs)
Msrc/main/java/info/ahlberg/spring/service/ContactService.java (1 diff)
Msrc/main/java/info/ahlberg/spring/service/ContactServiceImpl.java (1 diff)
Msrc/main/webapp/WEB-INF/view/index.jsp (1 diff)

File differences

src/main/java/info/ahlberg/spring/controller/ContactController.java
11package info.ahlberg.spring.controller;
2import java.util.List;
3
42import info.ahlberg.spring.domain.Contact;
53import info.ahlberg.spring.service.ContactService;
4import java.beans.PropertyEditorSupport;
5import java.util.List;
6
67import org.springframework.beans.factory.annotation.Autowired;
78import org.springframework.stereotype.Controller;
89import org.springframework.ui.Model;
10import org.springframework.web.bind.WebDataBinder;
11import org.springframework.web.bind.annotation.InitBinder;
12import org.springframework.web.bind.annotation.PathVariable;
913import org.springframework.web.bind.annotation.RequestMapping;
14import org.springframework.web.bind.annotation.RequestMethod;
1015import org.springframework.web.bind.annotation.RequestParam;
1116import org.springframework.web.bind.annotation.ResponseBody;
...... 
1823    @Autowired
1924    private ContactService contactService;
25    @InitBinder
26    public void initBinder(WebDataBinder binder) {
27        binder.registerCustomEditor(Contact.class, new PropertyEditorSupport() {
28            @Override
29            public void setAsText(String text) throws IllegalArgumentException {
30                Long id = Long.parseLong(text);
31                setValue(contactService.findById(id));
32            }
33        });
34    }
35
2036    @RequestMapping("/")
2137    String index(Model model) {
22        model.addAttribute("msg", "A nice message");
23
2438        model.addAttribute("contacts", contactService.findAll());
2539        return "index";
2640    }
2741    @RequestMapping("/contacts")
28    @ResponseBody List<Contact> contacts(Model model) {
42    public @ResponseBody List<Contact> contacts(Model model) {
2943        return contactService.findAll();
3044    }
31    @RequestMapping("/add")
32    String add(@RequestParam String name, Model model) {
33        model.addAttribute("msg", "A nice message");
45    @RequestMapping(value="/add", method = RequestMethod.GET)
46    public String addContact(Model model) {
47        model.addAttribute("contact", new Contact());
48        return "contact";
49    }
50
51    @RequestMapping(value="/contact/{contact}", method = RequestMethod.GET)
52    public String showContact(@PathVariable("contact") Contact contact, Model model) {
53        model.addAttribute("contact", contact);
54
55        return "contact";
56    }
57
58    @RequestMapping(value="/contact/{contact}", method = RequestMethod.POST)
59    public String updateContact(@PathVariable("contact") Contact originalContact, Contact contact, Model model) {
60        originalContact.setFirstName(contact.getFirstName());
61        originalContact.setLastName(contact.getLastName());
62
63        model.addAttribute("contact", originalContact);
64
65        contactService.update(originalContact);
66
67        return "contact";
68    }
69
70    @RequestMapping(value="/add", method = RequestMethod.POST)
71    public String add(@RequestParam String firstName, @RequestParam String lastName, Model model) {
3472        Contact contact = new Contact();
35        contact.setName(name);
73        contact.setFirstName(firstName);
74        contact.setLastName(lastName);
3675        contactService.save(contact);
76        model.addAttribute("msg", "Contact added");
77
3778        model.addAttribute("contacts", contactService.findAll());
3879        return "index";
src/main/java/info/ahlberg/spring/domain/Contact.java
2121    private Long version;
2222    @Column(nullable = false)
23    private String name;
23    private String firstName;
24
25    @Column(nullable = false)
26    private String lastName;
2427    public Long getId() {
2528        return id;
...... 
3942        this.version = version;
4043    }
41    public String getName() {
42        return name;
44    public String getFirstName() {
45        return firstName;
46    }
47
48    public void setFirstName(String firstName) {
49        this.firstName = firstName;
50    }
51
52    public String getLastName() {
53        return lastName;
4354    }
44    public void setName(String name) {
45        this.name = name;
55    public void setLastName(String lastName) {
56        this.lastName = lastName;
4657    }
4758}
src/main/java/info/ahlberg/spring/service/ContactService.java
88    List<Contact> findAll();
9    Contact findById(Long id);
10
911    void save(Contact contact);
12    void update(Contact contact);
13
1014}
src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java
2525        contactDAO.persist(contact);
2626    }
27    @Override
28    @Transactional
29    public void update(Contact contact) {
30        contactDAO.update(contact);
31    }
32
33    @Override
34    public Contact findById(Long id) {
35        return contactDAO.loadById(id);
36    }
37
2738}
src/main/webapp/WEB-INF/view/contact.jsp
1<?xml version='1.0' encoding='utf-8'?>
2<jsp:root version="2.0" xmlns="http://www.w3c.org/1999/xhtml"
3    xmlns:jsp="http://java.sun.com/JSP/Page"
4    xmlns:c="http://java.sun.com/jsp/jstl/core"
5    xmlns:form="http://www.springframework.org/tags/form"
6    xmlns:spring="http://www.springframework.org/tags">
7
8<jsp:directive.page contentType="text/html" pageEncoding="utf-8" />
9<jsp:output omit-xml-declaration="true" />
10<jsp:output doctype-root-element="html" doctype-system="about:legacy-compat" />
11
12<html>
13<head>
14    <meta charset="utf-8" />
15
16    <title>Spring MVC example</title>
17</head>
18
19<body>
20
21<div>
22    <c:out value="${ msg }" />
23</div>
24
25<div>
26    <form:form commandName="contact" method="POST">
27        First name: <form:input path="firstName" /><br/>
28        Last name: <form:input path="lastName" /><br/>
29        <input type="submit" value="Save Changes" />
30    </form:form>
31</div>
32
33</body>
34</html>
35</jsp:root>
src/main/webapp/WEB-INF/view/index.jsp
1919<body>
2020<div>
21
22<c:out value="${ msg }" />
23
21    <c:out value="${ msg }" />
2422</div>
2523<div>
26
2724<ul>
28
29<c:forEach items="${ contacts }" var="contact">
30
31    <li><c:out value="${ contact.name }"/></li>
32
33</c:forEach>
34
25    <c:forEach items="${ contacts }" var="contact">
26        <c:url value="/contact/${ contact.id }" var="url"/>
27        <li>
28            <a href="${ url }"><c:out value="${ contact.firstName }"/>&#160;<c:out value="${ contact.lastName }"/></a>
29        </li>
30    </c:forEach>
3531</ul>
32<c:url value="/add" var="url"/>
33<a href="${ url }">Add contact</a>
3634</div>
3735</body>

Archive Download the corresponding diff file

Branches