Bonjour,
Je débute avec Spring et j'essaie de comprendre un peu son fonctionnement. Ben voilà, j'ai décidé de suivre le tuto de krams915 : et d'y ajouter quelques fonctionnalités. Je souhaite ajouter des visites aux personnes de la liste de l'application, j'ai pu créer les entity ...sauf que lorsque je veux les visites par personnes la page jsp n'affiche rien, et meme pas une erreur.

Il me semble que le probleme se pose avec la fonction getVisiteByUser(Integer personId) de VisiteService.java et la fonction @RequestMapping(value = "/visite/visitebyuser", method = RequestMethod.GET) public String getAllVisiteByUser .... du controller

Si quelqu'un pouvait m'aider, please !
Mon fichier personspage.jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Persons</h1>
	<c:url var="mainUrl" value="/krams/main/persons" />
	<c:url var="mainUrlMoney" value="/krams/main/personsListMoney" />
	<c:url var="mainUrlMoneyASC" value="/krams/main/personsListMoneyAsc" />
	<c:url var="mainUrlName" value="/krams/main/personsListName"/>
	<p>
	<a href="${mainUrl}">Liste normale</a>
	<a href="${mainUrlMoneyASC}">Liste tri&eacute;e par money ASC</a>&nbsp;
	<a href="${mainUrlMoney}">Liste tri&eacute;e par money DESC</a>&nbsp;
	<a href="${mainUrlName}">Liste tri&eacute;e par Nom</a>&nbsp;
	</p>
<c:url var="addUrl" value="/krams/main/persons/add" />
<c:url var="listallvisite" value="/krams/main/visites" />
<table style="border: 1px solid; width: 500px; text-align:center">
	<thead style="background:#fcf">
		<tr>
			<th>First Name</th>
			<th>Last Name</th>
			<th>Money</th>
			<th>Adresse</th>
			<th>code postal</th>
						<th>ville</th>
			<th colspan="6"></th>
		</tr>
	</thead>
	<p><a href="${listallvisite}">Voir toutes les visites</a></p>
	<tbody>
	<c:forEach items="${persons}" var="person">
			<c:url var="editUrl" value="/krams/main/persons/edit?id=${person.id}" />
			<c:url var="deleteUrl" value="/krams/main/persons/delete?id=${person.id}" />
			<c:url var="listvisitebyuser" value="/krams/main/visite/visitebyuser?id=${person.id}" />
 
		<tr>
			<td><c:out value="${person.firstName}" /></td>
			<td><c:out value="${person.lastName}" /></td>
			<td><c:out value="${person.money}" /></td>
			<td><c:out value="${person.adresse}" /></td>
			<td><c:out value="${person.cp}" /></td>
			<td><c:out value="${person.ville}" /></td>
			<td><a href="${editUrl}">Edit</a></td>
			<td><a href="${deleteUrl}">Delete</a></td>
			<td><a href="${addUrl}">Add</a></td>
			<td><a href="${listvisitebyuser}">Voir ses visites</a></td>
		</tr>
	</c:forEach>
	</tbody>
</table>
 
<c:if test="${empty persons}">
	There are currently no persons in the list. <a href="${addUrl}">Add</a> a person.
</c:if>
 
</body>
</html>
Entity Person.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 
package org.krams.tutorial.domain;
 
 
import java.io.Serializable;
import java.util.Set;
 
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.JoinColumn;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;
 
/**
 * For a complete reference see 
 * <a href="http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/">
 * Hibernate Annotations Communit Documentations</a>
 */
@Entity
@Table(name = "PERSON")
public class Person implements Serializable {
 
	private static final long serialVersionUID = -5527566248002296042L;
 
	@Id
	@Column(name = "ID")
	@GeneratedValue
	private Integer id;
 
	@Column(name = "FIRST_NAME")
	private String firstName;
 
	@Column(name = "LAST_NAME")
	private String lastName;
 
	@Column(name = "MONEY")
	private Double money;
 
	@Column(name = "ADRESSE")
	private String adresse;
 
	@Column(name = "CP")
	private String cp;
 
	@Column(name = "VILLE")
	private String ville;
 
	@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
	 @JoinTable(
	            name="PersonVisites",
	            joinColumns = @JoinColumn( name="PERSON_ID"),
	            inverseJoinColumns = @JoinColumn( name="VISITE_ID")
	    )
	 private Set<Visite> visites;
 
 
	public Set<Visite> getVisites() {
		  return visites;
	}
 
	public void setVisites(Set<Visite> visites) {
		  this.visites = visites;
	}
 
	public String getCp() {
		return cp;
	}
 
	public void setCp(String cp) {
		this.cp = cp;
	}
 
	public String getVille() {
		return ville;
	}
 
	public void setVille(String ville) {
		this.ville = ville;
	}
 
	public String getAdresse() {
		return adresse;
	}
 
	public void setAdresse(String adresse) {
		this.adresse = adresse;
	}
 
	public Integer getId() {
		return id;
	}
 
	public void setId(Integer id) {
		this.id = id;
	}
 
	public String getFirstName() {
		return firstName;
	}
 
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
 
	public String getLastName() {
		return lastName;
	}
 
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
 
	public Double getMoney() {
		return money;
	}
 
	public void setMoney(Double money) {
		this.money = money;
	}
}
Entity Visite.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
....
....
@Entity
@Table(name = "VISITE")
public class Visite implements Serializable {
 
	private static final long serialVersionUID = -5527566248002296042L;
 
	@Id
	@Column(name = "ID_VISITE")
	@GeneratedValue
	private Integer id_visite;
 
	@Column(name = "LIEU_VISITE")
	private String lieu_visite;
 
	@Column(name = "DESCRIPTION_VISITE")
	private String description_visite;
 
	public Integer getId_visite() {
		return id_visite;
	}
 
	public void setId_visite(Integer id_visite) {
		this.id_visite = id_visite;
	}
 
	public String getLieu_visite() {
		return lieu_visite;
	}
 
	public void setLieu_visite(String lieu_visite) {
		this.lieu_visite = lieu_visite;
	}
 
	public String getDescription_visite() {
		return description_visite;
	}
 
	public void setDescription_visite(String description_visite) {
		this.description_visite = description_visite;
	}
}
Service PersonService.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
 
 package org.krams.tutorial.service;
 
import java.util.List;
 
import javax.annotation.Resource;
 
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.krams.tutorial.domain.Person;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
/**
 * Service for processing Persons
 * 
 */
@Service("personService")
@Transactional
public class PersonService {
 
	protected static Logger logger = Logger.getLogger("service");
 
	@Resource(name="sessionFactory")
	private SessionFactory sessionFactory;
 
	/**
         * Retrieves all persons
         * 
         * @return a list of persons
         */
	public List<Person> getAll() {
		logger.debug("Retrieving all persons");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Create a Hibernate query (HQL)
		Query query = session.createQuery("FROM  Person");
 
		// Retrieve all
		return  query.list();
	}
 
 
	/**
         * Retrieves all persons Order by Money
         * 
         * @return a list of persons
         */
	public List<Person> getAllByMoney() {
		logger.debug("Retrieving all persons ORDER BY MONEY");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Create a Hibernate query (HQL)
		Query query = session.createQuery("FROM Person order by MONEY DESC");
 
		// Retrieve all
		return  query.list();
	}
 
	/**
         * Retrieves all persons Order by Money
         * 
         * @return a list of persons
         */
	public List<Person> getAllByMoneyAsc() {
		logger.debug("Retrieving all persons ORDER BY MONEY");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Create a Hibernate query (HQL)
		Query query = session.createQuery("FROM Person order by MONEY ASC");
 
		// Retrieve all
		return  query.list();
	}
 
 
 
	/**
         * Retrieves all persons Order by Nom
         * 
         * @return a list of persons
         */
	public List<Person> getAllByNameAsc() {
		logger.debug("Retrieving all persons ORDER BY NAME");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Create a Hibernate query (HQL)
		Query query = session.createQuery("FROM Person order by FIRST_NAME ASC, LAST_NAME");
 
		// Retrieve all
		return  query.list();
	}
 
 
 
	/**
         * Retrieves a single person
         */
	public Person get( Integer id ) {
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Retrieve existing person first
		Person person = (Person) session.get(Person.class, id);
 
		return person;
	}
	/**
         * Adds a new person
         */
	public void add(Person person) {
		logger.debug("Adding new person");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Save
		session.save(person);
	}
 
	/**
         * Deletes an existing person
         * @param id the id of the existing person
         */
	public void delete(Integer id) {
		logger.debug("Deleting existing person");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Retrieve existing person first
		Person person = (Person) session.get(Person.class, id);
 
		// Delete 
		session.delete(person);
	}
 
	/**
         * Edits an existing person
         */
	public void edit(Person person) {
		logger.debug("Editing existing person");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Retrieve existing person via id
		Person existingPerson = (Person) session.get(Person.class, person.getId());
 
		// Assign updated values to this person
		existingPerson.setFirstName(person.getFirstName());
		existingPerson.setLastName(person.getLastName());
		existingPerson.setMoney(person.getMoney());
		existingPerson.setAdresse(person.getAdresse());
		existingPerson.setCp(person.getCp());
		existingPerson.setVille(person.getVille());
 
		// Save updates
		session.save(existingPerson);
	}
}
Service VisiteService.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
 
package org.krams.tutorial.service;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.annotation.Resource;
 
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.krams.tutorial.domain.Person;
import org.krams.tutorial.domain.Visite;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
/**
 * Service for processing Persons
 * 
 */
@Service("visiteService")
@Transactional
public class VisiteService {
 
	protected static Logger logger = Logger.getLogger("visite");
 
	@Resource(name="sessionFactory")
	private SessionFactory sessionFactory;
 
	/**
         * Retrieves all visites
         * 
         * @return a list of visite
         */
	public List<Visite> getAll() {
		logger.debug("la fonction GetALL avec parametre");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Create a Hibernate query (HQL)
		/*Query query = session.createSQLQuery("SELECT * FROM PERSON as P, PERSON_VISITE as PV, VISITE as V, WHERE P.ID = PV.PERSON_ID AND PV.visites_ID_VISITE = V.ID_VISITE");*/
		Query query = session.createQuery("FROM Visite");
		// Retrieve all
		return  query.list();
	}
 
	/**
         * Retrieves a single visite
         */
	public Visite get( Integer id ) {
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Retrieve existing person first
		Visite visite = (Visite) session.get(Visite.class, id);
 
		return visite;
	}
	/**
         * Adds a new visite
         */
	public void add(Visite visite) {
		logger.debug("Adding new visite");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Save
		session.save(visite);
	}
 
	/**
         * Deletes an existing person
         * @param id the id of the existing person
         */
	public void delete(Integer id) {
		logger.debug("Deleting existing visite");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Retrieve existing person first
		Visite visite = (Visite) session.get(Visite.class, id);
 
		// Delete 
		session.delete(visite);
	}
 
	/**
         * Edits an existing visite
         */
	public void edit(Visite visite) {
		logger.debug("Editing existing visite");
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
		// Retrieve existing person via id
		Visite existingVisite = (Visite) session.get(Visite.class, visite.getId_visite());
		// Assign updated values to this person
		existingVisite.setDescription_visite(visite.getDescription_visite());
		existingVisite.setLieu_visite(visite.getLieu_visite());
		// Save updates
		session.save(existingVisite);
	}
 
 
	public List<Visite> getVisiteByUser(Integer personId) {
		logger.debug("Retrieving all visites");
 
		// Retrieve session from Hibernate
		Session session = sessionFactory.getCurrentSession();
 
		// Create a Hibernate query (HQL)
		Query query = session.createQuery("FROM Person as p WHERE p.id="+personId);
		Person person = (Person) query.uniqueResult();
 
		// Retrieve all
		return  query.list();
		//return new ArrayList<Visite>(person.getVisites());
 
	}
 
}
Le controller :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
 
package org.krams.tutorial.controller;
 
import java.util.List;
 
import javax.annotation.Resource;
 
import org.apache.log4j.Logger;
import org.krams.*;
import org.krams.tutorial.domain.Person;
import org.krams.tutorial.domain.Visite;
import org.krams.tutorial.service.PersonService;
import org.krams.tutorial.service.VisiteService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
 
 
/**
 * Handles and retrieves person request
 */
@Controller
@RequestMapping("/main")
public class MainController {
 
	protected static Logger logger = Logger.getLogger("controller");
 
	@Resource(name="personService")
	private PersonService personService;
 
	@Resource (name="visiteService")
	private VisiteService visiteService;
 
	/**
         * Handles and retrieves all persons and show it in a JSP page
         * 
         * @return the name of the JSP page
         */
    @RequestMapping(value = "/persons", method = RequestMethod.GET)
    public String getPersons(Model model) {
 
    	logger.debug("Received request to show all persons");
 
    	// Retrieve all persons by delegating the call to PersonService
    	List<Person> persons = personService.getAll();
 
    	// Attach persons to the Model
    	model.addAttribute("persons", persons);
 
    	// This will resolve to /WEB-INF/jsp/personspage.jsp
    	return "personspage";
	}
 
	/**
         * Handles and retrieves all visites and show it in a JSP page
         * 
         * @return the name of the JSP page
         */
    @RequestMapping(value = "/visites", method = RequestMethod.GET)
    public String getVisitesAll(Model model) {
 
    	logger.debug("AFFICHE TOUTE lES PERSONNES :: getAll()");
 
    	// Retrieve all persons by delegating the call to PersonService
    	List<Visite> visites = visiteService.getAll();
 
    	// Attach visite to the Model
    	model.addAttribute("visites", visites);
 
    	// This will resolve to /WEB-INF/jsp/visitepage.jsp
    	return "/visite/visitepage";
	}
 
    /**
     * Affiche les visites de chaque user
     * 
     * @return the name of the JSP page
     */
    @RequestMapping(value = "/visite/visitebyuser", method = RequestMethod.GET)
    public String getAllVisiteByUser(@RequestParam(value="id", required=true) Integer id,  
    										Model model) {
    	logger.debug("Visite by user");
    	// Retrieve existing Person and add to model
    	// This is the formBackingOBject
 
    	List<Visite> visites = visiteService.getVisiteByUser(id);
    	//model.addAttribute("visites", visiteService.getVisiteByUser(id));
    	model.addAllAttributes(visites);
 
    	// This will resolve to /WEB-INF/jsp/editpage.jsp
    	return "/visite/visitepagebyuser";
	} 
 
	/**
         * Handles and retrieves all persons and show it in a JSP page
         * 
         * @return the name of the JSP page
         */
    @RequestMapping(value = "/personsListMoney", method = RequestMethod.GET)
    public String getListPersons(Model model) {
 
    	logger.debug("Received request to show all persons");
 
    	// Retrieve all persons by delegating the call to PersonService
    	List<Person> persons = personService.getAllByMoney();
 
    	// Attach persons to the Model
    	model.addAttribute("persons", persons);
 
    	// This will resolve to /WEB-INF/jsp/personspage.jsp
    	return "personspage";
	}
 
	/**
         * Affiche la liste des personnes triés par money
         * 
         * @return the name of the JSP page
         */
    @RequestMapping(value = "/personsListMoneyAsc", method = RequestMethod.GET)
    public String getListPersonsMoneyAsc(Model model) {
 
    	logger.debug("Received request to show all persons");
 
    	// Retrieve all persons by delegating the call to PersonService
    	List<Person> persons = personService.getAllByMoneyAsc();
 
    	// Attach persons to the Model
    	model.addAttribute("persons", persons);
 
    	// This will resolve to /WEB-INF/jsp/personspage.jsp
    	return "personspage";
	}
 
 
 
 
	/**
         * Handles and retrieves all persons ORBER BY NAME and show it in a JSP page
         * 
         * @return the name of the JSP page
         */
    @RequestMapping(value = "/personsListName", method = RequestMethod.GET)
    public String getListPersonsByName(Model model) {
 
    	logger.debug("Received request to show all persons ORDER BY NAME");
 
    	// Retrieve all persons by delegating the call to PersonService
    	List<Person> persons = personService.getAllByNameAsc();
 
    	// Attach persons to the Model
    	model.addAttribute("persons", persons);
 
    	// This will resolve to /WEB-INF/jsp/personspage.jsp
    	return "personspage";
	}
 
    /**
     * Retrieves the add page
     * 
     * @return the name of the JSP page
     */
    @RequestMapping(value = "/persons/add", method = RequestMethod.GET)
    public String getAdd(Model model) {
    	logger.debug("Received request to show add page");
 
    	// Create new Person and add to model
    	// This is the formBackingOBject
    	model.addAttribute("personAttribute", new Person());
 
    	// This will resolve to /WEB-INF/jsp/addpage.jsp
    	return "addpage";
	}
 
    /**
     * Adds a new person by delegating the processing to PersonService.
     * Displays a confirmation JSP page
     * 
     * @return  the name of the JSP page
     */
    @RequestMapping(value = "/persons/add", method = RequestMethod.POST)
    public String add(@ModelAttribute("personAttribute") Person person) {
		logger.debug("Received request to add new person");
 
    	// The "personAttribute" model has been passed to the controller from the JSP
    	// We use the name "personAttribute" because the JSP uses that name
 
		// Call PersonService to do the actual adding
		personService.add(person);
 
    	// This will resolve to /WEB-INF/jsp/addedpage.jsp
		return "addedpage";
	}
 
    /**
     * Deletes an existing person by delegating the processing to PersonService.
     * Displays a confirmation JSP page
     * 
     * @return  the name of the JSP page
     */
    @RequestMapping(value = "/persons/delete", method = RequestMethod.GET)
    public String delete(@RequestParam(value="id", required=true) Integer id, 
    										Model model) {
 
		logger.debug("Received request to delete existing person");
 
		// Call PersonService to do the actual deleting
		personService.delete(id);
 
		// Add id reference to Model
		model.addAttribute("id", id);
 
    	// This will resolve to /WEB-INF/jsp/deletedpage.jsp
		return "deletedpage";
	}
 
    /**
     * Retrieves the edit page
     * 
     * @return the name of the JSP page
     */
    @RequestMapping(value = "/persons/edit", method = RequestMethod.GET)
    public String getEdit(@RequestParam(value="id", required=true) Integer id,  
    										Model model) {
    	logger.debug("Received request to show edit page");
 
    	// Retrieve existing Person and add to model
    	// This is the formBackingOBject
    	model.addAttribute("personAttribute", personService.get(id));
 
    	// This will resolve to /WEB-INF/jsp/editpage.jsp
    	return "editpage";
	}
 
    /**
     * Edits an existing person by delegating the processing to PersonService.
     * Displays a confirmation JSP page
     * 
     * @return  the name of the JSP page
     */
    @RequestMapping(value = "/persons/edit", method = RequestMethod.POST)
    public String saveEdit(@ModelAttribute("personAttribute") Person person, 
    										   @RequestParam(value="id", required=true) Integer id, 
    												Model model) {
    	logger.debug("Received request to update person");
 
    	// The "personAttribute" model has been passed to the controller from the JSP
    	// We use the name "personAttribute" because the JSP uses that name
 
    	// We manually assign the id because we disabled it in the JSP page
    	// When a field is disabled it will not be included in the ModelAttribute
    	person.setId(id);
 
    	// Delegate to PersonService for editing
    	personService.edit(person);
 
    	// Add id reference to Model
		model.addAttribute("id", id);
 
    	// This will resolve to /WEB-INF/jsp/editedpage.jsp
		return "editedpage";
	}
 
}