RequestDispatcher vers le doGet d'une Servlet
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:
Code:
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);
}
} |
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).
Voici le code AddAccountServlet :
Code:
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. :ccool: