gpt4 book ai didi

java - 在我的 arraylist.set() 上获取空值。使用jsp

转载 作者:行者123 更新时间:2023-12-01 11:06:11 25 4
gpt4 key购买 nike

我的目标是从 html 表单添加单词,将它们存储在我的数组中,在页面中显示它们,并有两个链接,一个用于删除项目,一个用于编辑项目(编辑单词将在另一种 html 表单)。

我使用 arrayList 来存储来自输入类型的输入。我可以添加和删除我的项目,但是当我尝试更改 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>" + "&nbsp;&nbsp;<a href='WordOperations?delete=" + i + "'>Delete</a>&nbsp;&nbsp;<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);
}
}

最佳答案

这是一个逻辑错误..

您正在运行 servlet WordOperations.java 两次编辑单词并传递 edit参数一次并传递userChange另一个参数和NOT一起可以解决问题。

这是错误。

但首先设置Arraylist words在添加第一个单词的 session 中。你可以这样做:

else //logging in
{
if (newWord != null && !newWord.equals("")) {
ArrayList<String> words = (ArrayList<String>) s.getAttribute("words");
if (words == null) {
words = new ArrayList<>();
words.add(newWord);
s.setAttribute("words", words);
} else {
words.add(newWord);
}

RequestDispatcher rd = getServletContext().getRequestDispatcher("/main.jsp");
request.setAttribute("message", "Word added");
rd.forward(request, response);

}

现在这是错误:

Arraylist words列于 main.jsp 。它包含

word Delete_link Edit_link

现在删除_链接> <a href='WordOperations?delete=" + i + "'>Delete</a>工作正常,因为您只是将其重定向到 WordsOperations.java参数 delete = i并从 ArrayList 中删除该单词。

WordsOperations.java

String delete = request.getParameter("delete");

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);
}

但是

在编辑链接中 > <a href='WordOperations?edit=" + i + "'>Edit</a>您正在调用 servlet WordsOperations.java仅包含参数 edit = i并且通过userChange参数与它。

因此newLinkNULL 位于

String newLink = request.getParameter("userChange");

所以WordsOperation.java中的代码即

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);

}

将被执行为 edit!=nulltrue 。但它会添加newLink在数组列表中words这恰好是 NULL。因此 null 被添加到您的列表中。

Arraylist.set()没有问题方法。

现在在上面的代码中您正在调用 edit.jsp添加newLink后。但是当 WordsOperation.java接到 edit.jsp 的电话形式,它只是传递 userChange 参数,NOT edit执行 else if(edit!=null) 所需的参数Servlet block WordsOperations.java

<form action="WordOperations?" method="POST">
New Link:<input type="text" name="userChange">
<input type="submit" name="userChangePassword" value="Change link">
</form>

休息是你的事。只需注意将 edit 和 UserChange 参数传递给 Servlet WordsOperations.java 即可完成工作。

建议:通过edit参数edit.jsp然后通过edit and UserChange参数WordsOperation.java .

希望有帮助。

关于java - 在我的 arraylist.set() 上获取空值。使用jsp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32919186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com