Я пытаюсь получить доступ к атрибуту, который я передал, но он дает мне исключение нулевого указателя

В моем 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)

Любые предложения будут полезны

Вы пытались получить значение идентификатора следующим образом: request.getParameter("id")?

Swati 11.12.2020 07:31

да, я только что попробовал, теперь doGet() работает, я потратил на это час, и это была глупая ошибка. Но теперь, когда я отправляю форму ImageEdit.jsp, я получаю .NullPointerException

Akhil Garg 11.12.2020 07:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
151
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 не будет передано, вы снова получите исключение нулевого указателя, поэтому вам может потребоваться сначала выполнить проверку нуля... А затем, возможно, некоторую проверку того, что входное значение является числом... и т. д...

да, я попробовал, и это сработало, и мне пришлось сделать это, как вы сказали в стороне, большое спасибо за помощь: P

Akhil Garg 11.12.2020 07:39

но теперь я получаю NullPointerException в doPost()

Akhil Garg 11.12.2020 07:40

Вы не называете свой id в форме «POST», вы только указываете значение.

hooknc 11.12.2020 07:41

извините, я не понял, вы можете объяснить?

Akhil Garg 11.12.2020 07:43

Изменить <input type = "hidden" value=${id} /> на <input type = "hidden" name = "imageId" value=${id} />

hooknc 11.12.2020 07:44

Это была форма удаления, для которой я не установил имя, моя форма ImageEdit находится в вопросе, который я разместил, и я получаю сообщение об ошибке для моего doPost() в ImageEdit.java, когда я отправляю ImageEdit.jsp

Akhil Garg 11.12.2020 07:52

Понятно... Я невнимательно читал. Но ответ тот же (даже), для вашей формы нет отправленных входных данных, и вам нужно добавить что-то похожее на следующее <input type = "hidden" name = "id" value=${id} />. Вы можете открыть другой вопрос.

hooknc 11.12.2020 07:54

Другие вопросы по теме