Bonjour,

Je tente désespéremment d'injecter automatiquement les paramètres de la requête (champs d'un formulaire) dans un java Bean, au moyen de l'instruction <jsp:setProperty />. Cependant, rien ne fonctionne et le bean est toujours null.

Mon projet fonctionne sous Glassfish 3.1.1 avec Java EE6 et je crois que les changements à EE 6 ont à voir avec mon problème mais je ne sais comment le résoudre...

Voici les 4 fichiers illustrant mon problème, réduits à leur plus simple expression...

1) Une page jsp contenant le formulaire avec un seul champ et les déclaration afin d'y lier la bean usager :

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
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="usager" class="entites.Usager" scope="session" />
<jsp:setProperty name="usager" property="*"/>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Page TEST</title>
    </head>
    <body>
        <h1>Veuillez saisir quelque chose!</h1>
        <p></p>
        <form action="Valider" method="post" >
            <input type="text"  name="champ" value="" size="20" />
            <button type="submit" value="Valider" name="Valider"  >Cliquez ici!</button>
        </form>
    </body>
</html>
2) La bean Usager :


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
package entites;
 
import javax.inject.Inject;
 
public class Usager {
 
    private String champ;
 
    public String getChamp() {return champ;}
 
    public void setChamp(String champ) {
        this.champ = champ;
    }
 
}

3) L'extrait de la servlet à qui est transmise le formulaire.

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
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession laSession = request.getSession(true);
        Usager usager = (Usager) laSession.getAttribute("usager");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Valider</title>");
            out.println("</head>");
            out.println("<body>");
 
            out.println("[Valider] La javaBean «usager» a été récupérée de la session.");
            out.println("<br/>");
            out.println("Champ = " + usager.getChamp());
 
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }

4) Le descripteur de déploiement :

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
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>Valider</servlet-name>
        <servlet-class>entites.Valider</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Valider</servlet-name>
        <url-pattern>/Valider</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>
Lorsque l'on exécute le projet, l'on obtient :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
[Valider] La javaBean «usager» a été récupérée de la session. 
Champ = null
Conclusion : le paramètre de la requête n'est pas injecté dans la bean.

Qu'ai-je oublié pour qu'un projet aussi simple ne fonctionne pas?

Merci à l'avance.