【发布时间】:2015-12-31 08:57:36
【问题描述】:
我的目标是从 html 表单中添加单词,将它们存储在我的数组中,在页面中显示它们,并有两个链接一个用于删除项目,一个用于编辑项目(用于编辑的单词将输入另一个 html 表单)。
我正在使用 arrayList 来存储来自 Input 类型的输入。我能够添加和删除我的项目,但是当我尝试更改我的 arrayList 中项目的值时(我正在使用 arrayList.set()),我的值返回 null。如果我对 set() 进行硬编码,我会看到我的项目发生了变化,但由于某种原因,我无法从输入类型中获取值。想知道我错过了什么。
我有两个 jsp 页面。 main.jsp 和 edit.jsp。 一个具有所有验证的 java 类 WordOperations
这是我的代码 很抱歉,如果它很乱并且没有在这里显示。这是我第一次在stackoverflow上发帖
任何帮助将不胜感激。谢谢
这是我显示我的项目 main.jsp 的表单的代码
<h3>Word List</h3>
<form action="WordOperations" method="POST">
Word: <input type="text" name="newWord">
<input type="submit" value="Add">
</form>
<br/>
<%
ArrayList<String> words = (ArrayList<String>) session.getAttribute("words");
if (words!=null)
{
for (int i=0; i<words.size(); i++)
{
out.println("<p>" + "<a href='http://www."+ words.get(i) +".com'>" + words.get(i) +"</a>" + " <a href='WordOperations?delete=" + i + "'>Delete</a> <a href='WordOperations?edit=" + i + "'>Edit</a></p>");
}
}
%>
这是我的代码,用于输入新信息的地方 edit.jsp
<form action="WordOperations?" method="POST">
New Link:<input type="text" name="userChange">
<input type="submit" name="userChangePassword" value="Change link">
</form>
这是验证我的表单 WordOperations.java 的代码
HttpSession session = request.getSession();
String newWord = request.getParameter("newWord");
String delete = request.getParameter("delete");
String edit = request.getParameter("edit");
String newLink = request.getParameter("userChange");
if (delete!=null) //delete a word
{
int delIndex = Integer.parseInt(delete);
ArrayList<String> words = (ArrayList<String>) session.getAttribute("words");
words.remove(delIndex);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/main.jsp");
request.setAttribute("message", "Word deleted");
rd.forward(request, response);
}
else if(edit !=null)
{
int edIndex = Integer.parseInt(edit);
String link = newLink;
ArrayList<String> words = (ArrayList<String>) session.getAttribute("words");
words.set(edIndex,"google");
words.add(newLink);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/edit.jsp");
request.setAttribute("message", "Word edited");
rd.forward(request, response);
}
else //logging in
{
if (newWord!=null && !newWord.equals(""))
{
ArrayList<String> words = (ArrayList<String>) session.getAttribute("words");
words.add(newWord);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/main.jsp");
request.setAttribute("message", "Word added");
rd.forward(request, response);
}
else
{
RequestDispatcher rd = getServletContext().getRequestDispatcher("/main.jsp");
request.setAttribute("message", "Word is required");
rd.forward(request, response);
}
}
【问题讨论】:
-
很难猜出这里到底发生了什么。您可以通过提供发生的堆栈跟踪并指出问题所在代码中的哪一行来改进您的问题。乍一看,我会说您从这里的会话
ArrayList<String> words = (ArrayList<String>) session.getAttribute("words");中检索了ArrayList,我进一步猜测会话不包含属性words,因此该数组为空并在您尝试时导致 NullPointerException访问它。
标签: java jsp arraylist null set