request.getParameter 没有预期的空值
request.getParameter don't have null values when they are expected
我发现这个问题非常令人困惑(但也很有趣),所以我想请教这里的人。
我一直在自学 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( )
方法都不包含空值,即使我将它们设为空。
即使我能想出其他算法,我也想知道为什么会出现这种现象。
如有任何建议,我们将不胜感激。
之所以在if
块运行中的语句是因为该字段存在。如果您不想在文本框为空时 运行 它,您应该在条件中包含一个检查参数是否包含空字符串,例如:
request.getParameter("ID_A") != null && !request.getParameter("ID_A").isEmpty()
|| request.getParameter("Password_A") && !request.getParameter("Password_A").isEmpty()
...
So all the request.getParameter( ) methods above don't contain null
values even if I make them empty.
是的。当 getParamater()
returns 为 null
值时,这意味着它无法在表单中找到具有该名称的字段。使用另一种方法:isEmpty()
检查字段是否为空。如:
request.getParameter("noSuchField")==null //true
request.getParameter("ID_A")==null //false
request.getParameter("ID_A").isEmpty() //true
<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")))) {
...
}
我发现这个问题非常令人困惑(但也很有趣),所以我想请教这里的人。
我一直在自学 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( )
方法都不包含空值,即使我将它们设为空。
即使我能想出其他算法,我也想知道为什么会出现这种现象。
如有任何建议,我们将不胜感激。
之所以在if
块运行中的语句是因为该字段存在。如果您不想在文本框为空时 运行 它,您应该在条件中包含一个检查参数是否包含空字符串,例如:
request.getParameter("ID_A") != null && !request.getParameter("ID_A").isEmpty()
|| request.getParameter("Password_A") && !request.getParameter("Password_A").isEmpty()
...
So all the request.getParameter( ) methods above don't contain null values even if I make them empty.
是的。当 getParamater()
returns 为 null
值时,这意味着它无法在表单中找到具有该名称的字段。使用另一种方法:isEmpty()
检查字段是否为空。如:
request.getParameter("noSuchField")==null //true
request.getParameter("ID_A")==null //false
request.getParameter("ID_A").isEmpty() //true
<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")))) {
...
}