2016-07-17 71 views
-2

我想檢查Integer值是否爲空。 Integer的值在表單中完成。這是我的代碼。檢查整數是否爲空

這裏的價值介紹:

<input name="varsta" placeHolder="Varsta:" type="text" data-constraints='@NotEmpty @Required @AlphaSpecial'> <br/><br/> 

現在我要檢查是否有推出與否的數據。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 

    Integer varsta = Integer.parseInt(request.getParameter("varsta")); 
    request.getSession().setAttribute("varsta", varsta); 

    try { 
     DBConnection connection = new DBConnection(); 
     Connection con = connection.Connect(); 

     PreparedStatement ps = con.prepareStatement(
      "insert into user(Nume,Prenume,E_mail,Parola,Varsta,Sex,Greutate,Inaltime,Nivel_activitate,Calcul_calorii)" + 
      "values ('"+nume+"','"+prenume+"','"+email1+"','"+parola+"','"+varsta+"','"+sex+"','"+greutate+"','"+inaltime+"','"+activitate+"','"+calorii+"')" 
     ); 

     if (varsta == null && "".equals(varsta)) { 
      String message = "Va rugam completati cu atentie TOATE campurile!"; 
      request.setAttribute("message", message); 
      request.getRequestDispatcher("/inregistrare.jsp").forward(request, response);   
     } else { 
      int i = ps.executeUpdate(); 

      if (i > 0) { 
       request.getRequestDispatcher("/preferinte.jsp").forward(request, response); 
      } 
     } 
     ps.close(); 
     con.close();   
    } catch(Exception se) { 
     se.printStackTrace(); 
    } 
}  

不工作。

任何人都可以幫助我嗎?

+0

您的代碼中存在一些錯誤和誤解。什麼'System.out.println(request.getParameter(「varsta」))''打印?一些錯誤:您將變量定義爲'varsta',並且您正在檢查'Varsta',這只是第一個問題。作爲'varsta'一個整數你不能檢查它對「」(空)它是一個整數。 –

+0

你的意思是「varsta」參考而不是'Varsta'在你身上嗎?如果你這樣做了,這個'if'語句永遠不會返回'true',因爲你在比較不同類型的對象:'Integer'對'String' –

+0

什麼是'request'? – Seelenvirtuose

回答

2

Integer類只是基本類型int類型的包裝。所以它可以是null或存儲一個有效的整數值。它沒有明顯的「空白」定義。

如果您只是將Integer與空String進行比較,那麼您將得到false。總是。見Integer.equals(Object o)實現:

public boolean equals(Object obj) { 
    if (obj instanceof Integer) { 
     return value == ((Integer)obj).intValue(); 
    } 
    return false; 
} 

首先,你可以在該行解析整數期間獲得NumberFormatException

Integer varsta = Integer.parseInt(request.getParameter("varsta")); 

而你得到它,因爲For input string: ""看起來像一個NumberFormatExpection消息。

在您的例子您應該檢查"varsta"屬性值是否是一個數字(假設它是一個字符串),然後分析它,或解析它作爲是,趕上NumberFormatExceptionInteger.parseInt()拋出不正確的說法。

解決方案一:

Integer varsta = null; 
String varstaStr = request.getParameter("varsta"); // read string 'varsta' field 
if (varstaStr != null && varstaStr.matches("\\d+")) { // null-check and regex check to make sure the string contains only digits 
    varsta = Integer.parseInt(varstaStr); 
} 

解決方法二:

Integer varsta = null; 
String varstaStr = request.getParameter("varsta"); // read string 'varsta' field 
try { 
    varsta = Integer.parseInt(varsta); 
} catch (NumberFormatException e) { 
    // handle error 
} 

在此之後,你必須在該行多了一個問題:

if(varsta == null && "".equals(varsta)){ 

varsta參考具有類型Integer在這裏,所以"".equals(varsta)總是返回false

(varsta == null && "".equals(varsta)) = [assume varsta is null] = 
((null) == null && "".equals(null)) = (true && false) = false 

更換

if(varsta == null && "".equals(varsta)){ 

if(varsta == null){ 

這會幫助你。

P.S.如果您使用版本7或更高版本的Java,請考慮使用try-with-resources來管理ConnectionPreparedStatement

+0

我只想檢查是否在代表值爲空/空的字段中。如果是,則返回給我一條消息如果否,則返回另一條消息。 問題是,'varsta'在int中,但我檢查它作爲一個字符串。 我不知道如何檢查它像整數 – Bogdan

+0

@Bogdan如果你需要檢查一個String實例是null還是空的,你可以使用str!= null &&!!「」。equals(str )'條件。您還可以使用[Apache commong-lang3]中的'String.isNotEmpty(String str)'(https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html )或'String.isNotBlank(String str)'如果你想排除空白字符串以及 –

+0

使用:if(varsta == null &&「」.equals(varsta))似乎不起作用。 HTTP狀態500 - 對於輸入字符串:「」 – Bogdan

2

如果要檢查你的字段爲空或不小於你可以使用:

if (!request.getParameter("varsta").equals("")) { 
    System.out.println("not empty"); 
} else { 
    System.out.println("Empty"); 
} 

但是,如果你想獲得的價值,所以你應該是carful:

try { 
    if (!request.getParameter("varsta").equals("")) { 
     System.out.println("not empty"); 
     Integer varsta = new Integer(request.getParameter("varsta")); 
    } else { 
     System.out.println("Exmpty"); 
    } 
} catch (NumberFormatException e) { 
    System.out.println("Number is not correct"); 
} 

如果request.getParameter("varsta") = "4558ez"怎麼辦?這可能會造成問題。

+0

捕捉像這樣的例外是相當......討厭。即使在一些示例代碼中,最好也不要這樣做。只要抓住相關的異常,那麼'NumberFormatException',以及任何'request.getParameter'可能會拋出(如果你真的需要捕獲任何東西,而不是讓異常傳播得更高)。 – hyde

+0

是的這是真的,我會修復它 –

+0

使用request.getParameter(「varsta」)。等於(「」)不工作。 錯誤:HTTP狀態500 - 對於輸入字符串:「」 – Bogdan