#java #hibernate #jsp #servlets
#java #впасть в спящий режим #jsp #сервлеты
Вопрос:
В моем ImageUtility.jsp, где я отображаю изображения в табличной форме после получения сведений из базы данных, у меня есть форма редактирования (в ImageUtility.jsp), которая передаст идентификатор изображения в doGet() в ImageEdit.java , который после получения этого атрибута отправляет его в 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>
в ImageUtility.jsp я передаю идентификатор изображения, которое я хочу удалить, в метод 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)
Любые предложения были бы полезны
Комментарии:
1. Вы пытались получить значение идентификатора, подобное этому :
request.getParameter("id")
?2. да, я только что попробовал, сейчас работает doGet(), я потратил на это час, и это была глупая ошибка. Но теперь, когда я отправляю форму ImageEdit.jsp, я получаю исключение .NullPointerException
Ответ №1:
Я вполне уверен, что значения формы для формы «GET» превращаются в параметры запроса вместо атрибутов.
Попробуйте изменить свой doGet()
метод с:
int id=(int) request.getAttribute("id");
Для:
int id=(int) request.getParameter("id");
Примечание сбоку
Я совершенно уверен, что вы не можете привести String
к и int
тому подобное.
Вам, скорее всего, нужно сделать следующее:
int id = Integer.parseInt(request.getParameter("id"));
Но, если это id
значение не будет передано, вы снова получите исключение нулевого указателя, поэтому вам может потребоваться сначала выполнить проверку null… И затем, возможно, некоторая проверка того, что входное значение является числом … и т.д…
Комментарии:
1. да, я попробовал, и это сработало, и мне пришлось сделать это, как вы указали в side sode , большое вам спасибо за помощь: P
2. но теперь я получаю исключение NullPointerException в doPost()
3. Вы не указываете свое имя
id
в своей форме POST, вы только указываете значение.4. извините, я вас не понял, вы можете объяснить?
5. Я вижу… Я недостаточно внимательно читал. Но ответ тот же (ish), для вашей формы нет отправленных входных данных, и вам нужно добавить что-то похожее на следующее
<input type="hidden" name="id" value=${id} />
. Вы могли бы рассмотреть возможность открытия другого вопроса.