我有以下表格:
<form action="/AppStore/publish" method="post" accept-charset="ISO-8859-1">
<fieldset>
<legend>Do you have an Account already?</legend>
<input type="radio" name="registred" value="yes"> Yes
<input type="radio" name="registred" value="no"> No
</fieldset>
<fieldset>
<legend>About your App</legend>
<table>
<tr>
<td><label for="AppDesc">Describe it:</label></td>
<td><input type="text" name="AppDesc" /></td>
</tr>
<tr>
<td><label for="AppName">Name:</label></td>
<td><input type="text" name="AppName" /></td>
</tr>
</table>
</fieldset>
<input type="submit" value="Submit" />
</form>
我将此数据传递给Java Servlet,但每次我在getParameter(“AppDesc”)上获得Nullpointer异常,而getParameter(“AppName”)工作正常,我有什么不对?
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = getServletContext();
RequestDispatcher dispetcher = context.getRequestDispatcher("/publishForm.jsp");
List<String> errorMessages = new ArrayList<String>();
//Validating form input...
if(request.getParameter("AppName").toString().isEmpty())
{
errorMessages.add("Please type a valid Name for your App.");
}
if(request.getParameter("AppDesc").toString().isEmpty())
{
errorMessages.add("The Description of your App should contain at least 160 Characters.");
}
答案 0 :(得分:3)
您正在呼叫request.getParameter("...").toString()
。
request.getParameter()
已经返回一个字符串引用,因此您实际上不需要调用toString()
来将值作为字符串获取,但如果缺少参数,它将返回空引用 - 在调用toString()
的情况会引发异常。您需要检查值是null还是空。例如:
String description = request.getParameter("AppDesc");
if (description == null || description.isEmpty())
...
当然,有些库可以检查“null或empty” - 例如,在Guava中你可以使用:
if (Strings.isNullOrEmpty(description))
答案 1 :(得分:1)
如果request.getParameter("AppDesc")
是null
,那么
request.getParameter("AppDesc").toString().isEmpty()
会抛出NullPointerException
。
为什么不将条件更改为:
if(request.getParameter("AppDesc") == null ||
request.getParameter("AppDesc").toString().isEmpty()))
{
答案 2 :(得分:0)
<td><input type="text" name="AppDescr" /></td>
您已将实际字段命名为AppDescr
(请注意尾随“r”),但您正在为getParameter
调用AppDesc
(无“r”)。
编辑:或者不...你编辑了你的帖子并修复了它。这不是问题吗?
答案 3 :(得分:0)
必须是request.getParameter("AppDesc")
返回空值的情况,导致链接的toString()
生成NullPointerException。
此参数从未设置过; html中指定的名称是“AppDesr”(注意尾随'r')。
答案 4 :(得分:0)
您的问题标题为doGet
,您的代码为doPost
。这两者之间的区别可能解释了你的问题。 : - )