基本上,用户提交选定的年份,然后 servlet 返回相应的年度报告。然后用户可以修改相应的信息。然后servlet保存修改后的信息。
假设用户寻找的螺柱总是存在于 em 中。问题是:如果用户之前没有存储年报信息,并且用户提交了一年,即2009年,那么一切运行正常。用户修改信息,GPAInfoServlet 将存储修改的信息。
但是,在完成上述操作后,即用户之前存储了一份年报信息,用户(即我)在提交所选年份的过程中收到 ERROR 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;
......
}
如果 (stud.getAnnualReport() == null) **如何在 ** 中获取NullPointerException
if (stud != null) {
Map<Integer, AnnualReport> annualreport;
if (stud.getAnnualReport() == null)
annualreport = new HashMap<Integer, AnnualReport>();
else
annualreport = stud.getAnnualReport();
....
} else {
....
}
空指针异常?
需要帮助……我快死了……