我正在尝试访问我传递的属性,但它给了我一个空指针异常
I am trying to access attribute which I passed but it's giving me a null pointer exception
在我的 ImageUtility.jsp 中,我在从数据库获取详细信息后以 table 形式显示图像,我有一个编辑表单(在 ImageUtility.jsp) 会将图像的 id 传递给 ImageEdit.java 中的 doGet(),后者在获取该属性后将其发送到 ImageEdit.jsp 以及我试图访问该 id 属性以及用户输入的新名称的位置。
ImageUtility.jsp
for (Images i : li) {
id = i.getId() + "";
name = i.getName();
size = i.getSize() + " kb";
preview = i.getImagePath();
System.out.println(id+" "+name+" "+size);
pageContext.setAttribute("id", id);
pageContext.setAttribute("name", name);
pageContext.setAttribute("size", size);
%>
<tr>
<td>${id}</td>
<td class='ImgName'>${name}</td>
<td>${size}</td>
<td><img width='150px' height='150px' src='" + preview + "'></td>
<td><form action="ImageEdit" method="get"><input type="hidden" name="id" value=${id} /><input type="submit" value="Edit"/></form></td>
<td><form action="ImageDelete"><input type="hidden" value=${id} /><input type="submit" value="Delete" /></form></td>
</tr>
ImageEdit.java
@WebServlet("/ImageEdit")
public class ImageEdit extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id=(int) request.getAttribute("id");
System.out.println(id);
//request.setAttribute(name, o);
request.setAttribute("imageId", id);
request.getRequestDispatcher("ImageEdit.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int imageId = (int) request.getAttribute("imageId");
// int imageId = Integer.parseInt(str) ;
String str = request.getParameter("name");
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Images img = (Images) session.get(Images.class, imageId);
img.setName(str);
try {
session.update(img);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
session.close();
PrintWriter out = response.getWriter();
out.print("error");
return ;
}
session.close();
response.sendRedirect("./ImageUtility.jsp");
}
}
Imageedit.jsp
<html>
<head>
</head>
<body>
<div id ="overlay"></div>
<form method="post" action="ImageEdit" >
<fieldset>
<legend >Change Image Name</legend>
<label>Enter Name : <Input name="name" required></label><br><br>
<input type="submit">
</fieldset>
</form>
</body>
</html>
当我点击此处的“编辑”按钮时
<td><form action="ImageEdit" method="get"><input type="hidden" name="id" value=${id} /><input type="submit" value="Edit"/></form></td>
in ImageUtility.jsp 我将要删除的图像的 ID 传递给 doGet() 方法,但我在 doGet() 方法中出现空指针异常。我不知道是什么原因造成的
java.lang.NullPointerException
com.package.ImageUtilityApp.controllers.ImageEdit.doGet(ImageEdit.java:23)
javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
任何建议都会有所帮助
我非常有信心 'GET' 表单的表单值会变成查询参数而不是属性。
尝试更改您的 doGet()
方法:
int id=(int) request.getAttribute("id");
至:
int id=(int) request.getParameter("id");
旁注
我相当有信心您不能像那样将 String
和 int
强制转换。
您最需要执行以下操作:
int id = Integer.parseInt(request.getParameter("id"));
但是,如果未传入 id
值,您将再次遇到空指针异常,因此您可能需要先进行空检查...然后可能会进行一些验证输入值是一个数字...等等...
在我的 ImageUtility.jsp 中,我在从数据库获取详细信息后以 table 形式显示图像,我有一个编辑表单(在 ImageUtility.jsp) 会将图像的 id 传递给 ImageEdit.java 中的 doGet(),后者在获取该属性后将其发送到 ImageEdit.jsp 以及我试图访问该 id 属性以及用户输入的新名称的位置。
ImageUtility.jsp
for (Images i : li) {
id = i.getId() + "";
name = i.getName();
size = i.getSize() + " kb";
preview = i.getImagePath();
System.out.println(id+" "+name+" "+size);
pageContext.setAttribute("id", id);
pageContext.setAttribute("name", name);
pageContext.setAttribute("size", size);
%>
<tr>
<td>${id}</td>
<td class='ImgName'>${name}</td>
<td>${size}</td>
<td><img width='150px' height='150px' src='" + preview + "'></td>
<td><form action="ImageEdit" method="get"><input type="hidden" name="id" value=${id} /><input type="submit" value="Edit"/></form></td>
<td><form action="ImageDelete"><input type="hidden" value=${id} /><input type="submit" value="Delete" /></form></td>
</tr>
ImageEdit.java
@WebServlet("/ImageEdit")
public class ImageEdit extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id=(int) request.getAttribute("id");
System.out.println(id);
//request.setAttribute(name, o);
request.setAttribute("imageId", id);
request.getRequestDispatcher("ImageEdit.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int imageId = (int) request.getAttribute("imageId");
// int imageId = Integer.parseInt(str) ;
String str = request.getParameter("name");
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Images img = (Images) session.get(Images.class, imageId);
img.setName(str);
try {
session.update(img);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
session.close();
PrintWriter out = response.getWriter();
out.print("error");
return ;
}
session.close();
response.sendRedirect("./ImageUtility.jsp");
}
}
Imageedit.jsp
<html>
<head>
</head>
<body>
<div id ="overlay"></div>
<form method="post" action="ImageEdit" >
<fieldset>
<legend >Change Image Name</legend>
<label>Enter Name : <Input name="name" required></label><br><br>
<input type="submit">
</fieldset>
</form>
</body>
</html>
当我点击此处的“编辑”按钮时
<td><form action="ImageEdit" method="get"><input type="hidden" name="id" value=${id} /><input type="submit" value="Edit"/></form></td>
in ImageUtility.jsp 我将要删除的图像的 ID 传递给 doGet() 方法,但我在 doGet() 方法中出现空指针异常。我不知道是什么原因造成的
java.lang.NullPointerException
com.package.ImageUtilityApp.controllers.ImageEdit.doGet(ImageEdit.java:23)
javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
任何建议都会有所帮助
我非常有信心 'GET' 表单的表单值会变成查询参数而不是属性。
尝试更改您的 doGet()
方法:
int id=(int) request.getAttribute("id");
至:
int id=(int) request.getParameter("id");
旁注
我相当有信心您不能像那样将 String
和 int
强制转换。
您最需要执行以下操作:
int id = Integer.parseInt(request.getParameter("id"));
但是,如果未传入 id
值,您将再次遇到空指针异常,因此您可能需要先进行空检查...然后可能会进行一些验证输入值是一个数字...等等...