Bonjour à tous,
Je travaille sur un petit projet histoire de m'entrainer sur JEE. N'ayez pas peur du pavé, c'est juste que j'explique un maximum, vous pouvez survoler si vous connaissez bien les servlets.
Pour faire simple, j'ai une servlet nommée AddCustomerServlet (/AddCustomer) dans laquelle sont définies les méthodes doGet() et doPost().
*Le doGet() utilise un ReqDispatcher pour 'forwarder' vers une JSP contenant un formulaire. Le formulaire renvoie les entrées-utilisateurs vers le doPost() de cette même servlet.
*Le doPost() se charge de récupérer dans un objet Customer les paramètres de la requête Post. Je souhaite ensuite passer l'objet customer au doGet() d'une autre servlet : AddAccountServlet (/AddAccount). J'ai donc utilisé request.setAttribute("customer", customer); puis le RequestDispatcher vers cette deuxieme servlet.
Voici le code:
Pour une raison inconnue, le ReqDispatcher m'envoie dans le doPost() de la servlet AddAccountServlet, et non dans le doGet() (qui se charge normalement d'afficher un formaulaire de création d'un account).
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 @WebServlet(name = "AddCustomerServlet", urlPatterns = {"/AddCustomer"}) public class AddCustomerServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/jsp/advisor/addCustomer.jsp").forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Récupération depuis le Form de addCustomer.jsp Customer customer = new Customer(); customer.setFirstname(request.getParameter("firstname")); [...] request.setAttribute("customer", customer); // redirige vers création account request.getRequestDispatcher("/AddAccount").forward(request, response); } }
Voici le code AddAccountServlet :
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 @WebServlet(name = "AddAccountServlet", urlPatterns = {"/AddAccount"}) public class AddAccountServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //enum pour menu déroulant request.setAttribute("accTypes", AccountType.values()); request.getRequestDispatcher("/jsp/advisor/addAccount.jsp").forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Customer customer = (Customer) request.getAttribute("customer"); //Récupération depuis le Form de addAccount.jsp Account account = new Account(); account.setName(request.getParameter("name")); [...] customer.setAccount(account); [... ajout en bdd ...] [... redirection vers une JSP listant les customers ...] } }
Avez-vous une idée du pourquoi le RequestDispatcher du AddCustomerServlet.doPost() me renvoie dans AddAccountServlet.doPost() et non dans AddAccountServlet.doGet() ?
Pensez-vous que c'est à cause du parametre customer à l'intérieur ? (détection d'une requete de type POST?)
Si c'est le cas, comment puis-je faire pour forcer le doGet() tout en gardant customer dans la requête?
Le problème est contourné avec l'utilisation de getSession().setAttribute(), mais je voudrais savoir s'il y a une autre solution. L'utilisation de la session me posera problème pour la suite.
Merci pour votre aide! Et merci d'avoir lu.![]()
Partager