2011-08-15 18 views
-1

我已經去以下形式:空指針異常中的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> 

我這個數據傳遞到Java Servlet中,但每次我得到的getParameter(「AppDesc」)一個空指針異常,而不是的getParameter(「APPNAME 「)正常工作,我錯了什麼?

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」與您在目前爲止顯示的Servlet和HTML代碼中的內容不匹配。你確定你正在運行你認爲你正在運行的代碼嗎?順便說一下,期望非空參數是一個非常糟糕的設計。你也應該**先檢查它是否爲空。此外,'toString()'調用完全是多餘的。它已經是'String'了。 – BalusC

回答

3

您在致電request.getParameter("...").toString()

request.getParameter()已經返回一個字符串引用,所以你實際上並不需要調用toString()來獲取值作爲一個字符串,但它會返回一個空引用如果參數缺失 - 在這種情況下調用toString()將拋出例外。您需要檢查該值是否爲空或空值。例如:

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

當然,也有圖書館週圍檢查「空或空」 - 例如,在Guava你可以使用:

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

你命名實際字段AppDescr(注意後面的「r」),但是您要求getParameterAppDesc(sans「r」)。

編輯:或不...你編輯你的文章,並修復它。這不是問題嗎?

0

必須是request.getParameter("AppDesc")返回空值,導致鏈接toString()生成NullPointerException。

該參數從未設置;在html中指定的名稱是「AppDesr」(注意尾部'r')。

1

如果request.getParameter("AppDesc")null,然後

request.getParameter("AppDesc").toString().isEmpty()將拋出一個NullPointerException

何不條件更改爲:

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

你的問題的標題說:doGet,你的代碼說doPost。這兩者之間的差異可能會解釋您的問題。 :-)