Bonjour,
Pour ceux qui n'ont pas vu mes précédents messages, je réalise actuellement un site intranet. Aujourd'hui se pose le problème d'une requête HQL. Je dispose sur une page JSP d'une liste de personnes avec un cadre contenant des champs de recherche (nom, prenom, competences) accompagnés d'un bouton rechercher. Quand je clique sur le bouton cela déclenche la méthode doPost() de ma servlet dans laquelle j'effectue la requête suivante pour le moment :
nom étant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Query myQuery = session.createQuery("Select ab From Abonne ab where ab.abonneNom like '"+nom+"'");
Le problème qui se pose est quand le nom = "". J'ai en retour l'exception suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part String nom = request.getParameter("txtNom");
Je comprends donc bien qu'il ne veut pas de la chaîne vide dans la requête. J'ai essayé ça avant d'effectuer ma requête :
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 4594 [http-8081-Processor25] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/ProjectTest].[servletContacts] - "Servlet.service()" pour la servlet servletContacts a généré une exception java.lang.NullPointerException at servlet.ServletContacts.doPost(ServletContacts.java:100) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source)
J'ai même tenté en doublant les "%" mais rien n'y fait. Auriez-vous une idée svp comme Joker pour ma requête pour une chaine vide ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 if (nom != null) { if (nom.equals("")) { nom = "%"; } else { nom.replace("*","%"); } } else { nom = "%"; }
PS : la ligne : nom.replace("*","%"); est pour remplacer les * tapées par l'utilisateur.
Merci d'avance et bon appétit.
Partager