【问题标题】:I am trying to access attribute which I passed but it's giving me a null pointer exception我正在尝试访问我传递的属性,但它给了我一个空指针异常
【发布时间】:2020-12-11 06:23:02
【问题描述】:

在我的 ImageUtility.jsp 中,我在从数据库获取详细信息后以表格形式显示图像,我有一个编辑表单(在 ImageUtility.jsp 内),它将通过Image 的 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>

在 ImageUtility.jsp 中,我将要删除的 Image 的 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)

任何建议都会有所帮助

【问题讨论】:

  • 您是否尝试过像这样获取 id 值:request.getParameter("id")
  • 是的,我刚刚尝试过,现在 doGet() 正在工作,我花了一个小时在这上面,这是一个愚蠢的错误。但是现在当我提交 ImageEdit.jsp 表单时,我得到了 .NullPointerException

标签: java hibernate jsp servlets


【解决方案1】:

我相当有信心“GET”表单的表单值会变成查询参数而不是属性。

尝试更改您的 doGet() 方法:

int id=(int) request.getAttribute("id");

到:

int id=(int) request.getParameter("id");

旁注

我相当有信心你不能像这样将Stringint 投射到。

您最喜欢执行以下操作:

int id = Integer.parseInt(request.getParameter("id"));

但是,如果 id 值没有被传入,你会再次得到一个空指针异常,所以你可能需要先做一个空检查......然后也许验证输入值是一个数字……等等……

【讨论】:

  • 是的,我试过了,它奏效了,我必须按照你在旁边说的去做,非常感谢你的帮助:P
  • 但现在我在 doPost() 中得到 NullPointerException
  • 你没有在你的'POST'表单中命名你的id,你只给出了值。
  • 抱歉我没听明白你能解释一下吗?
  • 我明白了...我没有仔细阅读。但答案是相同的(ish),您的表单没有提交的输入,您需要添加类似于以下&lt;input type="hidden" name="id" value=${id} /&gt; 的内容。您可以考虑提出一个不同的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多