2016-07-17 66 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