Bonjour à tous et à toutes ^^
Voila j'ai un soucis je devellope un porjet assez conséquent pour un service de coordination commerciale. Mais voila je rencontre un souci, via mes servlets je ne récupère aucune donnée de type entier... et on me retourne a chaque fois cette erreur :
Etat HTTP 500 - null
type Rapport d''exception
message null
description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête.
exception
java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Unknown Source)
java.lang.Integer.parseInt(Unknown Source)
fr.gwenn.servlet.AjoutParam.doGet(AjoutParam.java:55)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/7.0.42.
Apache Tomcat/7.0.42
donc voila un exemple sur lequelle j'ai l'erreur : je dois créer un parametre composé d'une clé (le fameux int), d'une tranche (deux caracteres) d'une borne minimum et d'une borne maximum saisie par l'utilisateur. d'autre champs sont mis à zero. Donc voila la bean :
package fr.gwenn.bean;
Voici la jsp de création du paramètre (l'erreur apparaît apres) :
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 public class Parametre { private long cle; private String tranche; private int borneMin; private int borneMax; private int indiceUtilisa; private boolean actif; private ContexteClient cont; private double pourcentage; /* * la nature est un champs avec une lettre spécifiant si c'est une tranche * pour les lots ou pour les codes spécifiques l = lot c = code spécifique * l'utilisateur n'a aucun contact avec cette données on la génère par le * bouton sélectionné au menu paramètre et il ne changera jamais (= pas de * possibilité de la modifier une fois créer) */ private String nature; public double getPourcentage() { return pourcentage; } public void setPourcentage() { double pour = this.indiceUtilisa * 100 / ( this.borneMax - this.borneMin ); this.pourcentage = pour; } // ========================================================== public boolean isActif() { return actif; } public long getCle() { return cle; } public String getTranche() { return tranche; } public int getBorneMin() { return borneMin; } public int getBorneMax() { return borneMax; } public ContexteClient getCont() { return cont; } public int getIndiceUtilisa() { return indiceUtilisa; } public String getNature() { return this.nature; } // ========================================================== public void setActif( boolean actif ) { this.actif = actif; } public void setNature( String nature ) { this.nature = nature; } public void setCle( long cle ) { this.cle = cle; } public void setTranche( String tr ) { this.tranche = tr; } public void setBorneMin( int borne ) { this.borneMin = borne; } public void setBorneMax( int borne ) { this.borneMax = borne; } public void setIndiceUtilisa( int ind ) { this.indiceUtilisa = ind; } public void setCont( ContexteClient cont ) { this.cont = cont; } }
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 <%@ page pageEncoding="UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Lolita V2: Ajout Parametre</title> </head> <body> <h2> Ajout parametre <c:out value ="${nat}"/> </h2> <label name ="cle"><c:out value ="${cle}"/></label> <label>Tranche : </label><input type="text" name ="tranche" maxlength= 2/><br/> <label>Borne Min :</label><input type ="text" name ="borneMin" maxlength =3/><br/> <label>Borne Max :</label><input type ="text" name ="borneMax" maxlength =3/><br/> <form method ="get" action="<c:url value="/ajoutPar"></c:url>"> <input type ="submit" value ="Creation"/> </form> </body> </html>
Voici ma servlet qui charge la page avec post (ce qui fonctionne très bien) et en retour par le GET ou l'erreur apparaît
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 package fr.gwenn.servlet; import static fr.gwenn.tools.Utilitaire.getValeurChamp; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import fr.gwenn.bean.ContexteClient; import fr.gwenn.bean.Parametre; import fr.gwenn.dao.DAOFactory; import fr.gwenn.dao.DAOMapping; import fr.gwenn.dao.ParametreDao; import fr.gwenn.forms.ParamForm; public class AjoutParam extends HttpServlet { private static final long serialVersionUID = 1L; private static final String CONF_DAO_FACTORY = "daofactory"; private static final String ATT_SESSION_CONTEXTE = "contexte"; private static final String ATT_CONTEXTE = "contexte"; private static final String ATT_NATURE = "nature"; private static final String ATT_BORNE_MAX = "borneMax"; private static final String ATT_BORNE_MIN = "borneMin"; private static final String ATT_CLE = "cle"; private static final String ATT_TRANCHE = "tranche"; private static final String VUE_FORM_CODE = "/WEB-INF/parametreCode.jsp"; private static final String VUE_FORM_LOT = "/WEB-INF/parametreLot.jsp"; private static final String VUE_FORM_CREA = "/WEB-INF/ajoutPar.jsp"; private ParametreDao parametreDao; private DAOMapping mapDAO; public void init() throws ServletException { this.parametreDao = ( (DAOFactory) getServletContext().getAttribute( CONF_DAO_FACTORY ) ).getParametreDao(); this.mapDAO = ( (DAOFactory) getServletContext().getAttribute( CONF_DAO_FACTORY ) ).getDaoMapping(); } protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { Parametre param = null; HttpSession session = request.getSession(); ContexteClient contexte = (ContexteClient) session.getAttribute( ATT_SESSION_CONTEXTE ); ParamForm form = new ParamForm( parametreDao, mapDAO ); String nat = getValeurChamp( request, ATT_NATURE ); String tr = getValeurChamp( request, ATT_TRANCHE ); int cle = Integer.parseInt( getValeurChamp( request, ATT_CLE ) ); int borneMin = Integer.parseInt( getValeurChamp( request, ATT_BORNE_MIN ) ); int borneMax = Integer.parseInt( getValeurChamp( request, ATT_BORNE_MAX ) ); param.setCle( cle ); param.setActif( false ); param.setCont( contexte ); param.setBorneMin( borneMin ); param.setBorneMax( borneMax ); param.setIndiceUtilisa( 0 ); param.setNature( nat ); param.setTranche( tr ); param.setPourcentage(); parametreDao.creer( param ); System.out.println( param.getCle() + ' ' + param.getBorneMax() + ' ' + param.getBorneMin() + ' ' + param.getCont().getMarque().getCodeMarque() + ' ' ); if ( nat == "c" ) { this.getServletContext().getRequestDispatcher( VUE_FORM_CODE ).forward( request, response ); } else { this.getServletContext().getRequestDispatcher( VUE_FORM_LOT ).forward( request, response ); } } protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { HttpSession session = request.getSession(); ParamForm form = new ParamForm( parametreDao, mapDAO ); String nat = getValeurChamp( request, ATT_NATURE ); int cle = parametreDao.getCle(); ContexteClient contexte = (ContexteClient) session.getAttribute( ATT_SESSION_CONTEXTE ); request.setAttribute( ATT_CONTEXTE, contexte ); request.setAttribute( ATT_NATURE, nat ); request.setAttribute( ATT_CLE, cle ); this.getServletContext().getRequestDispatcher( VUE_FORM_CREA ).forward( request, response ); } }
et voici ma DAO qui génere l'erreur lorsque je créée ma données
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230 package fr.gwenn.dao; import static fr.gwenn.dao.DAOUtilitaire.fermeturesSilencieuses; import static fr.gwenn.dao.DAOUtilitaire.initialisationRequetePreparee; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import fr.gwenn.bean.ContexteClient; import fr.gwenn.bean.Parametre; public class ParametreDao extends DAOMapping { private static final String SQL_SELECT = "SELECT cle, tranche, borneMin, borneMax, p.cPays, lpays, m.cMarque, lMarque, IndiceUtilisa, CodeType " + "FROM Parametre pa " + "LEFT OUTER JOIN PAYS p ON p.cPays = pa.cPays " + "LEFT OUTER JOIN MARQUE m ON m.cmarque = pa.cMarque " + "WHERE CodeType = ? " + "AND p.cPAYS = ? " + "AND m.cMarque = ? ;"; private static final String SQL_INSERT = "INSERT INTO Parametre " + "VALUES (?, ?, ?, ? ,?, ?, ?, false, ?)"; private static final String SQL_UPDATE_ACTIVE = "UPDATE PARAMETRE SET ACTIVE = 1 " + "WHERE cle =?;"; private static final String SQL_UPDATE_DESACTIVE = "UPDATE PARAMETRE SET ACTIVE = 0 " + "WHERE cle =?;"; private static final String SQL_UPDATE_INDICE = "UPDATE PARAMETRE SET INDICEUTILISA = ? " + "WHERE cle = ?"; private static final String SQL_SELECT_RECH = "SELECT cle, Tranche, BorneMin, BorneMax, IndiceUtilisa, cNature " + "FROM Parametre " + "WHERE cle = ?"; private static final String SQL_CLE = "SELECT Count(Cle) AS newCle FROM Parametre"; ParametreDao( DAOFactory daoFactory ) { super( daoFactory ); } public void creer( Parametre para ) throws DAOException { Connection connexion = null; PreparedStatement preparedStatement = null; ResultSet valeursAutoGenerees = null; try { connexion = getDAOFactory().getConnection(); preparedStatement = initialisationRequetePreparee( connexion, SQL_INSERT, true, para.getCle(), para.getTranche(), para.getBorneMin(), para.getBorneMax(), para.getIndiceUtilisa(), para.getCont().getPays().getCodePays(), para.getCont().getMarque().getCodeMarque(), para.getNature() ); int statut = preparedStatement.executeUpdate(); if ( statut == 0 ) { throw new DAOException( "échec de la création du Paramètre, aucune ligne ajoutée dans la table." ); } System.out.println( "Cle " + para.getCle() + "Tranche " + para.getTranche() ); } catch ( SQLException e ) { throw new DAOException( e ); } finally { fermeturesSilencieuses( valeursAutoGenerees, preparedStatement, connexion ); } } private void activer( Parametre param ) { Connection connexion = null; PreparedStatement preparedStatement = null; try { connexion = getDAOFactory().getConnection(); preparedStatement = initialisationRequetePreparee( connexion, SQL_UPDATE_ACTIVE, false, param.getCle() ); int statut = preparedStatement.executeUpdate(); if ( statut == 0 ) { throw new DAOException( "échec de la modification du Paramètre, aucune ligne modifiée dans la table." ); } } catch ( SQLException e ) { throw new DAOException( e ); } finally { fermeturesSilencieuses( preparedStatement, connexion ); } } private void desactiver( Parametre param ) { Connection connexion = null; PreparedStatement preparedStatement = null; try { connexion = getDAOFactory().getConnection(); preparedStatement = initialisationRequetePreparee( connexion, SQL_UPDATE_DESACTIVE, false, param.getCle() ); int statut = preparedStatement.executeUpdate(); if ( statut == 0 ) { throw new DAOException( "échec de la modification du Paramètre, aucune ligne modifiée dans la table." ); } } catch ( SQLException e ) { throw new DAOException( e ); } finally { fermeturesSilencieuses( preparedStatement, connexion ); } } public List<Parametre> lister( char type, ContexteClient contexte ) throws DAOException { Connection connexion = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; List<Parametre> listePara = new ArrayList<Parametre>(); String typeL = Character.toString( type ); try { connexion = getDAOFactory().getConnection(); preparedStatement = initialisationRequetePreparee( connexion, SQL_SELECT, true, typeL, contexte.getPays() .getCodePays(), contexte .getMarque().getCodeMarque() ); resultSet = preparedStatement.executeQuery(); while ( resultSet.next() ) { listePara.add( mapParametre( resultSet ) ); } } catch ( SQLException e ) { throw new DAOException( e ); } finally { fermeturesSilencieuses( resultSet, preparedStatement, connexion ); } return listePara; } public Parametre getParam( char nature, ContexteClient contexte ) throws DAOException { Parametre param = new Parametre(); List<Parametre> listePara = lister( nature, contexte ); int i = 0; if ( !listePara.isEmpty() ) { while ( param.getTranche() == null ) { if ( listePara.get( i ).isActif() ) { param = listePara.get( i ); if ( param.getBorneMax() == param.getIndiceUtilisa() ) { this.desactiver( param ); param = listePara.get( i + 1 ); this.activer( param ); } } i++; } } return param; } public Parametre trouver( long id ) throws DAOException { return retournerParam( id ); } public void updateIndice( Parametre param, int nb ) { Connection connexion = null; PreparedStatement preparedStatement = null; try { connexion = getDAOFactory().getConnection(); preparedStatement = initialisationRequetePreparee( connexion, SQL_UPDATE_INDICE, false, nb, param.getCle() ); int statut = preparedStatement.executeUpdate(); if ( statut == 0 ) { throw new DAOException( "échec de la modification du Paramètre, aucune ligne modifiée dans la table." ); } } catch ( SQLException e ) { throw new DAOException( e ); } finally { fermeturesSilencieuses( preparedStatement, connexion ); } } public Parametre retournerParam( Long cParam ) throws DAOException { Connection connexion = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; Parametre param = null; try { // Récupération d'une connexion depuis la Factory connexion = getDAOFactory().getConnection(); // Préparation de la requête avec les objets passés en arguments // (ici, uniquement un id) et exécution. preparedStatement = initialisationRequetePreparee( connexion, SQL_SELECT_RECH, false, cParam ); resultSet = preparedStatement.executeQuery(); // Parcours de la ligne de données retournée dans le ResultSet if ( resultSet.next() ) { param = mapParametre( resultSet ); } } catch ( SQLException e ) { throw new DAOException( e ); } finally { fermeturesSilencieuses( resultSet, preparedStatement, connexion ); } return param; } public int getCle() throws DAOException { int cle = 0; Connection connexion = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { connexion = getDAOFactory().getConnection(); preparedStatement = connexion.prepareStatement( SQL_CLE ); resultSet = preparedStatement.executeQuery(); while ( resultSet.next() ) { cle = resultSet.getInt( "newCle" ) + 1; } } catch ( SQLException e ) { throw new DAOException( e ); } finally { fermeturesSilencieuses( resultSet, preparedStatement, connexion ); } return cle; } }
Partager