2011-08-15 4 views
-1

je dé formule suivante:exception Nullpointer dans doPost

 <form action="/AppStore/publish" method="post" accept-charset="ISO-8859-1"> 
     <fieldset> 
      <legend>Do you have an Account already?</legend> 
       <input type="radio" name="registred" value="yes"> Yes 
       <input type="radio" name="registred" value="no"> No 
     </fieldset> 
     <fieldset> 
      <legend>About your App</legend> 
      <table> 
       <tr> 
        <td><label for="AppDesc">Describe it:</label></td> 
        <td><input type="text" name="AppDesc" /></td> 
       </tr> 

       <tr> 
        <td><label for="AppName">Name:</label></td> 
        <td><input type="text" name="AppName" /></td> 
       </tr> 
      </table>  
     </fieldset> 
     <input type="submit" value="Submit" /> 
    </form> 

Je passe ces données à un Java Servlet, mais chaque fois que je reçois une exception Nullpointer à getParameter ("AppDesc"), au lieu getParameter ("AppName ") fonctionne bien, qu'est-ce que je me trompe?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    ServletContext context = getServletContext(); 
    RequestDispatcher dispetcher = context.getRequestDispatcher("/publishForm.jsp"); 
    List<String> errorMessages = new ArrayList<String>(); 

    //Validating form input... 

    if(request.getParameter("AppName").toString().isEmpty()) 
    { 
     errorMessages.add("Please type a valid Name for your App."); 
    } 

    if(request.getParameter("AppDesc").toString().isEmpty()) 
    { 
     errorMessages.add("The Description of your App should contain at least 160 Characters."); 
    } 
+1

' "AppDescr" 'ne correspond pas à ce que vous avez dans Servlet et le code HTML montré jusqu'ici. Êtes-vous sûr d'exécuter le code que vous pensez utiliser? Au fait, attendre des paramètres non-nuls est un très mauvais design. Vous devriez aussi ** vérifier ** s'il n'est pas nul. De plus, l'appel 'toString()' est entièrement superflu. C'est 'String' déjà. – BalusC

Répondre

3

Vous appelez request.getParameter("...").toString().

request.getParameter() retourne déjà une référence de chaîne, de sorte que vous n'avez pas vraiment besoin d'appeler toString() pour obtenir la valeur comme une chaîne, mais il renvoie une référence null si le paramètre est absent - auquel cas l'appel toString() va jeter un exception. Vous devez vérifier si la valeur est nulle ou vide. Par exemple:

String description = request.getParameter("AppDesc"); 
if (description == null || description.isEmpty()) 
... 

Bien sûr, il y a des bibliothèques autour de vérifier pour « nul ou vide » - par exemple, dans Guava vous pouvez utiliser:

if (Strings.isNullOrEmpty(description)) 
0
<td><input type="text" name="AppDescr" /></td> 

Vous avez nommé la champ réel AppDescr (remarquez le "r" final), mais vous appelez getParameter pour AppDesc (sans "r").

EDIT: Ou non ... vous avez édité votre message et l'avez corrigé. Ce n'était pas le problème?

0

Il doit être le cas que request.getParameter("AppDesc") renvoie une valeur null, provoquant toString() pour générer une exception NullPointerException.

Ce paramètre n'a jamais été défini; le nom spécifié dans le html était "AppDesr" (notez le "r" final).

1

Si request.getParameter("AppDesc") est null, puis

request.getParameter("AppDesc").toString().isEmpty() lancera une NullPointerException.

Pourquoi ne pas changer la condition:

if(request.getParameter("AppDesc") == null || 
     request.getParameter("AppDesc").toString().isEmpty())) 
    { 
0

Votre titre de la question dit doGet, votre code dit doPost. La différence entre ces deux peut expliquer votre problème. : ")