Bonjour à tous,

je développe habituellement en PHP, j'ai donc quelques soucis avec les mécanismes des JSP/Servlets.
En fait, je suis en train de développer un bête formulaire de connexion, avec une Servlet associée qui renvoie vers ce formulaire en cas d'erreur, vers une page membres si la connexion réussit.

Si la connexion échoué, les champs doivent être marqués comme incorrect, si la connexion réussit, un bean est instancié en session.
Je dois n'utiliser que les tags JSTL "core" (ni JSP scriptlets ou JSF) (=contrainte du projet).

Mon problème est que je n'arrive pas à marquer les champs comme incorrects, en cas d'erreur de saisie. J'ai essayé pas mal de choses... sans succès.

Voilà le code la page d'accueil (login.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
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page session="true"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set scope="session" var="isConnected" value="${session['isConnected']}" />
<c:set scope="session" var="hasErrors" value="${session['hasErrors']}" />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>Login</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link href="default.css" rel="stylesheet" type="text/css" media="all" />
   </head>
  <body>
      <div id="wrapper">
          <h1>Login</h1>
          <form action="Connect" method="post">
            <div class="input">
                <label for="username">
                    <c:if test="${hasErrors}">
                       <span class='error'>* </span>                        
                    </c:if>Username: 
                </label>
                <input type="text" id="username" name="username" />
            </div><div class="clearer">&nbsp;</div>
            <div class="input">
                <label for="password">
                    <c:if test="${hasErrors}">
                        <span class='error'>* </span>
                    </c:if> Password: 
                </label>
                <input type="password" id="password" name="password" />
            </div><div class="clearer">&nbsp;</div>
            <div class="inputSubmit">
                <input type="submit" value="Submit" />
            </div>
          </form>
          <p id="links">
              Not registered yet ? Create an account 
              <a href="register.jsp">here</a>.
          </p>
      </div><!-- end of wrapper -->
  </body>
</html>
Et voici le code de la servlet :
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
public class Connect extends HttpServlet {
 
    /** 
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        HttpSession session = request.getSession();
        String login = request.getParameter("username");
        String password = request.getParameter("password");
        ServletContext context = getServletContext();
        //retrieval of the corresponding user, if exists
        User storedUser = (User)context.getAttribute(login);
 
        /* ** FORM CHECK-OUT ** */
        //user doesn't exist or bad password
        if(storedUser==null || !password.equals(storedUser.getPassword())) {
            session.setAttribute("hasErrors", true);
            session.setAttribute("isConnected", false);
            //redirect to login page
            response.sendRedirect("login.jsp");
        }
        else if(password.equals(storedUser.getPassword())){
            session.setAttribute("isConnected", true);
            int hc = storedUser.getId().hashCode();
            session.setAttribute(login, hc);
            //redirect to the member welcome page
            response.sendRedirect("member.jsp?id="+hc);
        }
    }
 
    /** 
    * Returns a short description of the servlet.
    */
    @Override
    public String getServletInfo() {
        return "Servlet dedicated to user connection";
    }
 
}
Une aide sur ce point me permettrait de comprendre pas mal de choses.
Merci d'avance de votre aide !

Rolf

P.S. : ça déroge un peu à la charte, mais je dois avouer que mon problème est assez urgent...