2014-06-11 44 views
0

我有一个HTML格式的文本字段。getParameter()的行为

<input type="text" name="uname">

代码捕捉到Servlet类这段文字字段:

String userName = request.getParameter("uname");

而且我在做这样的事情:

if(userName.equals("aj")){ 

} 

现在的问题是,如果我在提交表单前保留了uname文本字段空白,我没有收到NullPointerException

甲骨文的文档说: 字符串的getParameter(字符串名称)

返回请求参数为字符串的值,或NULL,如果参数不存在

请清除我的困惑。

+0

你输入在文本框中确认的东西?或任何写在表单上的java脚本代码提交?> –

+0

@sᴜʀᴇsʜᴀᴛᴛᴀ我保留空白以理解行为。没有脚本在那里。只有带'servlets'的'html' –

+0

@AJ。正如你引用的那样,参数是否存在?检查空虚。 –

回答

1

参数存在但它的值是一个空字符串。所以你不会得到NullPointerException。或检查值设置好的不,你最好使用:

if ((userName != null) && !userName.isEmpty()) 

或(与Apache Commons):

if (StringUtils.isNotEmpty(userName)) 

不存在如果没有与名称的输入uname在您的HTML代码中。如果你删除这个输入,你会得到一个NullPointerException

-1

替换

if (userName != null && userName.equals("aj")){ 

} 

这有可能是userNamenull。您需要在调用方法之前对其进行测试。

+0

错了。如果没有输入,它将是空的。仅当该字段不存在于HTTP请求中时才为空(所以在HTML表单中)。 – lpratlong

1

该参数存在,因为它存在于窗体上。它只是空的,如果你想看看是否有东西被填充,你必须检查值。如果参数在您的表单上,它将始终存在。

1

更改您的表单提交方法PostGet看这URL

它会像

http://xxxx/x?uname=&otherparameters 

所以在这里,你UNAME与空串去,这样你就不会得到NPE

1

查看浏览器发送的原始HTTP请求。即使您将HTML输入“uname”留空,它也会发送到浏览器。您的HTTP请求的身体看起来像:

uname=&otherParameter=otherValue 

的方法HttpServletRequest.getParameter(“UNAME”),因此,不返回NULL,因为参数“UNAME”是在HTTP请求的身体。这就是Oracle文档中“参数不存在”的含义。

+0

答案已经给出了大约10次。不要添加更多的答案,只需+1就可以了。谢谢。 – lpratlong

1

如果我在提交表单之前将uname文本字段留空,我不是 得到NullPointerException!

在HTML表单,如果数据字段为空,则它不会放弃领域,它提交或数据字段因此你没有得到NullPointerException空字符串传递。

您可以通过请求的发布参数确认自己。你可以在firefox中使用Firebug来获取这些信息。

的情况下有没有参数可用参数名称,然后request.getParameter将返回你空你可以通过request.getParameter("uname1");

+0

答案已经给出了大约10次。不要添加更多的答案,只需+1就可以了。谢谢。 – lpratlong