request.getParameter在预期时不具有空值

时间:2015-01-13 00:57:06

标签: jsp servlets http-request-parameters

我发现这个问题很令人困惑(但也很有趣),我想在这里向人们征求深刻见解。

我一直在教自己JSP和相关技术。我要做的是从JSP检索参数到servlet,然后使用If()。 这是我编码的一部分。

if ((request.getParameter("ID_A") != null || request.getParameter("Password_A") != null) &&
    (request.getParameter("ID_B") != null || request.getParameter("Password_B") != null)) {

        errorMessage = "Information is detected for the both side";
        request.setAttribute("errorMessage", errorMessage);
        request.getRequestDispatcher("4_enter_personal_info.jsp").forward(request, response);
    } // Other conditions...

这是JSP的一部分(上一步)

<form action="PersonalInfor_to_confirmation_servlet" method="POST">
    <h2>For an existing customer</h2>
        <p>Customer ID</p>
        <input type="text" name="ID_A" value="" />
        <p>Password</p>
        <input type="text" name="Password_A" value="" />
        <br>
    <h2>For a new customer</h2>
        <p>Set your customer ID</p>
        <input type="text" name="ID_B" value="" />
        <p>Set your password</p>
        <input type="text" name="Password_B" value="" />
    //There are other lines
</form>

我想确保当客户在双方(For an existing customer/For a new customer)输入信息时,会在JSP上显示上述消息"Information is detected for the both side"

但是,即使所有文本框都为空白,也会显示错误消息。因此,即使我将它们设为空,上面的所有request.getParameter( )方法都不包含空值。

即使我能提出其他算法,我也想知道这种现象发生的原因。

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:4)

if块中的语句运行的原因是因为该字段存在。如果你不想在文本框为空时运行它,那么你应该做的就是在条件中包括检查参数是否包含空字符串,如:

request.getParameter("ID_A") != null && !request.getParameter("ID_A").isEmpty()
|| request.getParameter("Password_A") && !request.getParameter("Password_A").isEmpty()
...
  

所以上面的所有request.getParameter()方法都不包含null   即使我把它们弄空了也要重视。

是。当getParamater()返回null值时,表示它无法在具有该名称的表单中找到字段。使用另一种方法:isEmpty()检查字段是否为空。如:

request.getParameter("noSuchField")==null //true
request.getParameter("ID_A")==null //false
request.getParameter("ID_A").isEmpty() //true

答案 1 :(得分:1)

<input type="text" name="ID_A" value="" />

以这种方式提交表单时,您将使用ID_A作为键,并使用""(空字符串)作为值。获取null的方法是不发送任何值的ID_A

解决这个问题的一个好方法是明确检查空字符串:

private boolean isNullOrBlank(final String s) {
    return s == null || s.trim().length() == 0;
}

if ((isNullOrBlank(request.getParameter("ID_A"))||
     isNullOrBlank(request.getParameter("Password_A"))
    ) &&
    (isNullOrBlank(request.getParameter("ID_B"))|| 
     isNullOrBlank(request.getParameter("Password_B")))) {
 ...
}