基本上是用户提交所选年份,然后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);