GAE应用程序开发:返回hashmap时NullPoInterException



基本上是用户提交所选年份,然后servlet返回了年度报告。然后,用户可以修改依次信息。然后servlet保存修改的信息。

假设用户寻找的螺柱始终存在于EM中。问题是:如果用户之前没有存储年度报告信息,并且用户提交一年,即2009年,则一切正常。用户修改信息,GpainFoservlet将存储已修改的信息。

但是,在完成上述操作后,这意味着用户在此之前存储了一个年度报告信息,用户(表示我)会出现错误 nullpoInterException 在此过程中提交选定的一年

的过程中
at tcndata.Stud.jdoGetannualReport(Stud.java)
at tcndata.Stud.getAnnualReport(Stud.java:33)
at servlet.YearSelectedServlet.doPost(YearSelectedServlet.java:35)

选择年份:

public class YearSelectedServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    int yearselected = Integer.parseInt(req
            .getParameterValues("yearselected")[0]);
    long studid = Long.parseLong(req.getSession().getAttribute("studID")
            .toString());
    EntityManager em;
    em = EMF.get().createEntityManager();
    Stud stud = em.find(Stud.class, studid);
    if (stud != null) {
        Map<Integer, AnnualReport> annualreport;
        if (stud.getAnnualReport() == null)
            annualreport = new HashMap<Integer, AnnualReport>();
        else
            annualreport = stud.getAnnualReport();
        if (annualreport.containsKey(yearselected)) {
            AnnualReport thatyear = stud.getAnnualReport()
                    .get(yearselected);
            req.getSession().setAttribute("thatyear", thatyear);
            req.getSession().setAttribute("annualReport", thatyear);
        }
    } else {
        req.getSession().setAttribute("Error", "alumni not found");
        resp.sendRedirect("Error.jsp");
    }
    req.getSession().setAttribute("yearselected",
            req.getParameterValues("yearselected")[0]);
    req.getSession().setAttribute("SearchTag", "GPAInfo");
    resp.sendRedirect("Search.jsp");
}

}

保存信息修改:

public class GPAInfoServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    AnnualReport thatyear = new AnnualReport();
    thatyear.setAttendSchool(AttendSchool.valueOf(req
            .getParameterValues("AttendSchool")[0]));
    .....
    int yearselected = Integer.parseInt(req.getSession()
            .getAttribute("yearselected").toString());
    long studid = Long.parseLong(req.getSession().getAttribute("studID")
            .toString());
    EntityManager em;
    em = EMF.get().createEntityManager();
    Stud stud = em.find(Stud.class, studid);
    if (stud != null) {
        Map<Integer, AnnualReport> annualreport;
        if (stud.getAnnualReport() == null)
            annualreport = new HashMap<Integer, AnnualReport>();
        else
            annualreport = stud.getAnnualReport();
        annualreport.put(yearselected, thatyear);
        try {
            stud.setAnnualReport(annualreport);
            em.merge(stud);
        } finally {
            em.close();
        }
    } else {
        req.getSession().setAttribute("Error", "alumni not found");
        resp.sendRedirect("Error.jsp");
    }
    req.getSession().setAttribute("SearchTag", "GPAInfo");
    resp.sendRedirect("/Search.jsp");
}

}

螺柱课:

@Entity( name = "Stud")
public class Stud{
    @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long studID;
private Map<Integer,AnnualReport>annualReport = new HashMap<Integer,AnnualReport>();
public Map<Integer, AnnualReport> getAnnualReport() {
    return annualReport;
}
public void setAnnualReport(Map<Integer, AnnualReport> annualReport) {
    this.annualReport = annualReport;
}

**我没有想法会发生什么。

我已经在年度报告中@embeddable:

@Embeddable

公共班级年度报告{

@Basic
private AttendSchool attendSchool;
private String attendSchoolNote;
......

}

我如何获得 nullpointerexception in ** if(stud.get.get.getAnnualReport()== null)**

if (stud != null) {
        Map<Integer, AnnualReport> annualreport;
        if (stud.getAnnualReport() == null)
            annualreport = new HashMap<Integer, AnnualReport>();
        else
            annualreport = stud.getAnnualReport();
        ....
    } else {
        ....
    }

nullpoInterException

需要帮助...我快死了...

您确定线annualreport = stud.getAnnualReport();是您获得NPE的地方吗?

因为较低的几行您的代码肯定会产生NPE,如果stud.getAnnualReport()null

AnnualReport thatyear = stud.getAnnualReport()
                .get(yearselected);

相关内容

最新更新