2016-03-22 23 views
0

皆さん、私はこの質問が以前に尋ねられたことを知っています。しかし、ここの違いは私はオブジェクトを保存していません。アイデアは、親がセッションを開始した(ログインした)場合にのみ、学生にサインアップさせることです。エラー:トランザクションが正常に開始されませんでした。休止状態

  • 学生
  • 教師
  • ユーザー

すべての教師、生徒と親のuser_idを持っている:私は4つのエンティティを持っています。学生は常にparent_idを持っていなければなりません。親がログインすると、親IDが保存され、学生がサインアップしようとすると、親を見つけられず、スタックトレースにNPEがスローされます。しかし、UserActionがmain()によって実行されると、IDを完全に表示します。

22-Mar-2016 16:56:05.694 SEVERE [41] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jsp] in context with path [/TotTrack] threw exception [An exception occurred processing JSP page /AddStudent.jsp at line 52 

49:       <input class="form-control" type="text" required="true" name="last_name" placeholder="Enter Last Name"/> 
50:      </div> 
51:      <div class="input-group"> 
52:       <input type="hidden" name="parent_id" value="<%out.print(profile.getId());%>"/> 
53:       <label for="">Parent`s Name</label><req>*</req> 
54:       <input class="form-control" type="text" required="true" name="fname" placeholder="Enter Parent`s Name" value="<%out.print(profile.getFirstName() + " " + profile.getLastName());%>" readonly="true"/> 
55:      </div> 


Stacktrace:] with root cause 
java.lang.NullPointerException 
    at org.apache.jsp.AddStudent_jsp._jspService(AddStudent_jsp.java:297) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

サーバーログ:

1 
22-Mar-2016 16:56:05.170 INFO [http-nio-8080-exec-15] org.hibernate.cfg.Configuration.configure HHH000043: Configuring from resource: /hibernate.cfg.xml 
In not null value block 
22-Mar-2016 16:56:05.462 INFO [http-nio-8080-exec-15] org.hibernate.cfg.Configuration.addResource HHH000221: Reading mappings from resource: com/newidea/tottracker/mappings/StudentProfile.hbm.xml 
22-Mar-2016 16:56:05.474 INFO [http-nio-8080-exec-15] org.hibernate.cfg.Configuration.addResource HHH000221: Reading mappings from resource: com/newidea/tottracker/mappings/ExamResult.hbm.xml 
22-Mar-2016 16:56:05.490 INFO [http-nio-8080-exec-15] org.hibernate.cfg.Configuration.doConfigure HHH000041: Configured SessionFactory: null 
22-Mar-2016 16:56:05.494 INFO [http-nio-8080-exec-15] org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure HHH000402: Using Hibernate built-in connection pool (not for production use!) 
22-Mar-2016 16:56:05.494 INFO [http-nio-8080-exec-15] org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure HHH000115: Hibernate connection pool size: 20 
22-Mar-2016 16:56:05.494 INFO [http-nio-8080-exec-15] org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure HHH000006: Autocommit mode: false 
22-Mar-2016 16:56:05.494 INFO [http-nio-8080-exec-15] org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/sms?zeroDateTimeBehavior=convertToNull] 
22-Mar-2016 16:56:05.494 INFO [http-nio-8080-exec-15] org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure HHH000046: Connection properties: {user=root, password=****} 
22-Mar-2016 16:56:05.550 INFO [http-nio-8080-exec-15] org.hibernate.dialect.Dialect.<init> HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
22-Mar-2016 16:56:05.570 INFO [http-nio-8080-exec-15] org.hibernate.engine.transaction.internal.TransactionFactoryInitiator.initiateService HHH000399: Using default transaction strategy (direct JDBC transactions) 
22-Mar-2016 16:56:05.570 INFO [http-nio-8080-exec-15] org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory.<init> HHH000397: Using ASTQueryTranslatorFactory 
Starting to fetch Person Type 
Fetch User ID and Set to criteria 
Error : Transaction not successfully started 
Parent ID : 0 
エラー

<%@page import="com.newidea.tottracker.mappings.ParentProfileId"%> 
<%@page import="com.newidea.tottracker.mappings.ParentProfile"%> 
<%@page import="com.newidea.tottracker.action.Views"%> 
<%@page import="com.newidea.tottracker.action.AddressAction"%> 
<%@page import="com.newidea.tottracker.mappings.Address"%> 
<%@page import="com.newidea.tottracker.action.ParentAction"%> 
<%@page import="com.newidea.tottracker.action.UserAction"%> 
<%@page import="com.newidea.tottracker.data.Roles"%> 
<%@page import="com.newidea.tottracker.mappings.Parent"%> 
<%@page import="java.time.LocalDateTime"%> 
<%@page import="java.util.Calendar"%> 
<%@include file="header.jsp"%> 
<% Object roleObj = session.getAttribute("role"); 
    Object idObj = session.getAttribute("uid"); 
    int role, uid; 
    Views profileDB = new Views(); 
    ParentProfileId profile; 
    System.out.println(1); 
    if (roleObj == null || idObj == null || !(Integer.parseInt(roleObj.toString()) == Roles.PARENT)) { 
     roleObj = 0; 

    System.out.println("In null value block"); 
     response.sendRedirect("login.jsp?code=1"); 
     return; 
    } else { 
     role = Integer.parseInt(roleObj.toString()); 
     uid = Integer.parseInt(idObj.toString()); 
     System.out.println("In not null value block"); 
//  System.out.println("Role : " + role + " UID : " + new UserAction().getPersonIdByUserId(uid, role)); 
     int parent_id = new UserAction().getPersonIdByUserId(uid, role); 
     System.out.println("Parent ID : " + parent_id); 
     profile = profileDB.getParentProfile(parent_id); 

    } 
%> 
<div class="container-fluid"> 
    <div class="row"> 
     <div class="col-lg-offset-2 col-lg-8 col-lg-offset-2"> 
      <form class="border" action="addStudent" method="post" style=""> 
       <center><h2 style="color: whitesmoke; ">Add your Child</h2><hr style="margin:0px" /></center> 
       <div style="z-index: 100; background: whitesmoke"> 
        <h3 style="font-size: 23px; padding: 15px;padding-bottom: 5px; margin: 0px">Personal Details</h3><center><hr style="margin:1px; height: 1px; background: lightgray; width: 96%" /></center> 
        <div class="input-group"> 
         <label for="">First Name</label><req>*</req> 
         <input class="form-control" type="text" required="true" name="first_name" placeholder="Enter First Name"/> 
        </div> 
        <div class="input-group"> 
         <label for="">Last Name</label><req>*</req> 
         <input class="form-control" type="text" required="true" name="last_name" placeholder="Enter Last Name"/> 
        </div> 
        <div class="input-group"> 
         <input type="hidden" name="parent_id" value="<%out.print(profile.getId());%>"/> 
         <label for="">Parent`s Name</label><req>*</req> 
         <input class="form-control" type="text" required="true" name="fname" placeholder="Enter Parent`s Name" value="<%out.print(profile.getFirstName() + " " + profile.getLastName());%>" readonly="true"/> 
        </div> 
        <div class="input-group"> 
         <label for="">DOB</label><req>*</req> 
         <input class="form-control" type="date" required="true" name="dob" max="<%out.print((LocalDateTime.now().getYear() - 18) + "-01-01");%>"/> 
        </div> 
        <div class="input-group"> 
         <label for="">Gender</label><req>*</req><br/> 
         <select name="gender" class="form-control"> 
          <option value="0">Male</option> 
          <option value="1">Female</option> 
         </select> 
        </div> 
        <h3 style="font-size: 23px; padding: 15px;padding-bottom: 5px; margin: 0px">Contact Information</h3><center><hr style="margin:1px; height: 1px; background: lightgray; width: 96%" /></center> 
        <div class="input-group"> 
         <label for="">Phone Number</label><req>*</req> 
         <input class="form-control" type="number" required="true" name="phone" placeholder="Enter Phone"/> 
        </div> 
        <div id="adderss"> 
         <div class="input-group"> 
          <label for="">Address</label><req>*</req> 
          <span style="position: absolute; right: 0px;" id="sameAddr"> 
           <input type="hidden" name="same_address" value="0"/> 
           <input type="checkbox" name="same_address" id="sameAddress" value="1"><label for="sameAddress">&nbsp;I live with my parent.</label> 
          </span> 
          <input type="hidden" name="address_id" value="<%out.print(profile.getAddressId());%>"/> 
          <input class="form-control" type="text" required="true" name="address1" value="<%out.print(profile.getAddress1());%>" placeholder="Address Line 1"/> 
         </div> 
         <div class="input-group"> 
          <input class="form-control" type="text" name="address2" value="<%out.print(profile.getAddress2());%>" placeholder="Address Line 2"/> 
         </div> 
         <div class="input-group"> 
          <input class="form-control" type="text" required="true" name="city" value="<%out.print(profile.getCity());%>" placeholder="City"/> 
         </div> 
         <div class="input-group"> 
          <input class="form-control" type="text" required="true" name="state" value="<%out.print(profile.getState());%>" placeholder="State"/> 
         </div> 
         <div class="input-group"> 
          <input type="hidden" name="country_id" value="<%out.print(profile.getCountryId());%>"/> 
          <%@include file="countrylistselect.jsp" %> 
         </div> 
         <div class="input-group"> 
          <input class="form-control" type="number" required="true" name="pincode" value="<%out.print(profile.getPincode());%>" placeholder="Pincode"/> 
         </div> 
        </div> 
        <div class="input-group"> 
         <label for="">Joining Date</label><req>*</req> 
         <input class="form-control" type="date" required="true" name="doj" value="<%out.print(LocalDateTime.now().toLocalDate());%>" /> 
        </div> 
        <h3 style="font-size: 23px; padding: 15px;padding-bottom: 5px; margin: 0px">Login and Password Recovery Details</h3><center><hr style="margin:1px; height: 1px; background: lightgray; width: 96%" /></center> 
        <div class="input-group"> 
         <label for="">Email</label><req>*</req> 
         <input class="form-control" type="text" required="true" name="email" placeholder="Enter Email"/> 
        </div> 
        <div class="input-group"> 
         <label for="">Password</label><req>*</req> 
         <input class="form-control" type="password" required="true" name="pass" placeholder="Password"/> 
        </div> 
        <div class="input-group"> 
         <label for="">Confirm Password</label><req>*</req> 
         <input class="form-control" type="password" required="true" name="pass2" placeholder="Re-type Password"/> 
        </div> 
        <div class="input-group"> 
         <label for="">Security Question</label><req>*</req>&nbsp;&nbsp;(In case you forget your password, answer this) 
         <input class="form-control" type="text" required="true" name="security_question" placeholder="Security Question" value="Mother`s Maiden Name"/> 
        </div> 
        <div class="input-group"> 
         <label for="">Your Answer</label><req>*</req> 
         <input class="form-control" type="text" required="true" name="answer" placeholder="Your Answer"/> 
        </div> 
        <center> 
         <input type="checkbox" name="accept-eula" id="eula"/> <label for="eula">By checking this box, I agree to <a href="#">all terms</a> to use TotTracker<sup>TM</sup></label><br/> 
         <input type="submit" value="Sign Up" class="btn btn-info" style="margin-bottom: 10px"/> 
        </center> 
       </div> 
      </form> 
     </div> 
    </div> 
    <div class="clearfix"></div> 
    <script> 
     $().ready(function() { 
//   alert(("#sameAddress").val); 
      $("#sameAddress").change(function() { 
       if ($("#sameAddress").is(":checked")) { 
//     alert("Child has same address!"); 
        $("input[name=address1]").val("<%out.print(profile.getAddress1());%>").change(); 
        $("input[name=address2]").val("<%out.print(profile.getAddress2());%>").change(); 
        $("input[name=city]").val("<%out.print(profile.getCity());%>").change(); 
        $("input[name=state]").val("<%out.print(profile.getState());%>").change(); 
        $("input[name=pincode]").val("<%out.print(profile.getPincode());%>").change(); 
        $("#country").val("<%out.print(profile.getCountryIso());%>").change(); 
        $("input[name=address1]").attr("readonly", true); 
        $("input[name=address2]").attr("readonly", true); 
        $("input[name=city]").attr("readonly", true); 
        $("input[name=state]").attr("readonly", true); 
        $("input[name=pincode]").attr("readonly", true); 
        $("#country").attr("readonly", true); 
        $("input[name=address1]").removeAttr("required"); 
        $("input[name=address2]").removeAttr("required"); 
        $("input[name=city]").removeAttr("required"); 
        $("input[name=state]").removeAttr("required"); 
        $("input[name=pincode]").removeAttr("required"); 

       } else { 
//      alert("Child dont have same address!"); 
        $("input[name=address1]").removeAttr("readonly"); 
        $("input[name=address2]").removeAttr("readonly"); 
        $("input[name=city]").removeAttr("readonly"); 
        $("input[name=state]").removeAttr("readonly"); 
        $("input[name=pincode]").removeAttr("readonly"); 
        $("#country").removeAttr("readonly"); 
        $("input[name=address1]").attr("required", true); 
        $("input[name=address2]").attr("required", true); 
        $("input[name=city]").attr("required", true); 
        $("input[name=state]").attr("required", true); 
        $("input[name=pincode]").attr("required", true); 
        $("#country").attr("required", true); 
       } 
      }); 
     }); 
    </script> 
    <%@include file="footer.jsp" %> 

スタックトレース原因

コードUserAction.java

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package com.newidea.tottracker.action; 

import com.newidea.tottracker.data.Roles; 
import com.newidea.tottracker.mappings.Parent; 
import com.newidea.tottracker.mappings.Student; 
import com.newidea.tottracker.mappings.Teacher; 
import com.newidea.tottracker.mappings.User; 
import org.hibernate.Criteria; 
import org.hibernate.HibernateException; 
import org.hibernate.criterion.Restrictions; 
/** 
* 
* @author Mohit 
*/ 
public class UserAction extends BaseAction{ 

    public UserAction(){} 

    public int addUser(User user){ 
     session = getSessionFactory().openSession(); 
     tx = null; 
     int id = 0; 
     try{ 
      tx = session.beginTransaction(); 
      id = (Integer) session.save(user); 
      tx.commit(); 
     }catch(Exception e){ 
      if(tx != null) tx.rollback(); 
     }finally{ 
      session.close(); 
     } 
     return id; 
    } 

    public User getUser(int id){ 
     User user; 
     session = getSessionFactory().openSession(); 
     tx = null; 
     try{ 
      tx = session.beginTransaction(); 
      user = (User) session.get(User.class, id); 
      if(!tx.wasCommitted())tx.commit(); 
      System.out.println("Returning user ID : " + user.getId()); 
      return user; 
     }catch(Exception e){ 
      if(tx != null) tx.rollback(); 
      System.out.println("Error : " + e.getMessage()); 
      e.printStackTrace(); 
     }finally{ 

      session.close(); 
     } 
     System.out.println("Returning user ID : null"); 
     return null; 
    } 

    public User getUserByDetails(int role, String email){ 
     try{ 
      session = getSessionFactory().openSession(); 
      Criteria c = session.createCriteria(User.class); 
      c.add(Restrictions.eq("email", email)); 
      c.add(Restrictions.eq("role", getRole(role))); 
      if(c.list().isEmpty()) return null; 
      else return (User) c.list().get(0); 
     }catch(HibernateException e){ 
      System.out.println("Error : " + e.getMessage()); 
     }finally{ 
      if(session.isOpen()) session.close(); 
     } 
     return null; 
    } 

    public User getUserByEmail(String email){ 
     try{ 
      session = getSessionFactory().openSession(); 
      Criteria c = session.createCriteria(User.class); 
      c.add(Restrictions.eq("email", email)); 
      if(c.list().isEmpty()) return null; 
      else return (User) c.list().get(0); 
     }catch(HibernateException e){ 
      System.out.println("Error : " + e.getMessage()); 
     }finally{ 
      if(session.isOpen()) session.close(); 
     } 
     return null; 
    } 

    public int getPersonIdByUserId(int userid, int role){ 
     try{ 
      System.out.println("Starting to fetch Person Type"); 
        session = getSessionFactory().openSession(); 
//   tx = session.beginTransaction(); 
      Criteria c = null; 
      switch(role){ 
       case Roles.STUDENT: 
        c = session.createCriteria(Student.class); 
        break; 
       case Roles.PARENT: 
        c = session.createCriteria(Parent.class); 
        break; 
       case Roles.TEACHER: 
        c = session.createCriteria(Teacher.class); 
        break; 
      } 
      System.out.println("Fetch User ID and Set to criteria"); 
        c.add(Restrictions.eq("user", getUser(userid))); 
      System.out.println("Criteria set successfully!"); 
        switch(role){ 
       case Roles.STUDENT: 
        System.out.println("Returning Student User ID : " + userid); 
        Student student = (Student) c.list().get(0); 
        return student.getId(); 
       case Roles.PARENT: 
        System.out.println("Returning Parent User ID : " + userid); 
        Parent parent = (Parent) c.list().get(0); 
        return parent.getId(); 
       case Roles.TEACHER: 
        System.out.println("Returning Teacher User ID : " + userid); 
        Teacher teacher = (Teacher) c.list().get(0); 
        return teacher.getId(); 
      } 
     }catch(HibernateException e){ 
      System.out.println("Error : " + e.getMessage()); 
//   if(tx != null) tx.rollback(); 
     }finally{ 
//   tx.commit(); 
      if(session.isOpen()) session.close(); 
     } 
     return 0; 
    } 

    public boolean deleteUser(int id){ 
     User user; 
     session = getSessionFactory().openSession(); 
     tx = null; 
     try{ 
      tx = session.beginTransaction(); 
      user = (User) session.get(User.class, id); 
      session.delete(user); 
      tx.commit(); 
      return true; 
     }catch(Exception e){ 
      if(tx != null) tx.rollback(); 
     }finally{ 
      session.close(); 
     } 
     return false; 
    } 

    public boolean updateUser(int id, User newUser){ 
     User user; 
     session = getSessionFactory().openSession(); 
     tx = null; 
     try{ 
      tx = session.beginTransaction(); 
      user = (User) session.get(User.class, id); 
      user.setUsername(newUser.getUsername()); 
      user.setAnswer(newUser.getAnswer()); 
      user.setEmail(newUser.getEmail()); 
      user.setPassword(newUser.getPassword()); 
      user.setRole(newUser.getRole()); 
      user.setSecurityQuestion(newUser.getSecurityQuestion()); 
      session.merge(user); 
      tx.commit(); 
      return true; 
     }catch(Exception e){ 
      if(tx != null) tx.rollback(); 
     }finally{ 
      session.close(); 
     } 
     return false; 
    } 

    public static void main(String[] args){ 
     System.out.println("User ID : 4\nRole ID : 1\nPerson Enitity ID : " + new UserAction().getPersonIdByUserId(4,1)); 
     System.out.println("User ID : 4\nRole ID : 1\nPerson Enitity ID : " + new UserAction().getPersonIdByUserId(4,1)); 
     System.out.println("User ID : 4\nRole ID : 1\nPerson Enitity ID : " + new UserAction().getPersonIdByUserId(4,1)); 
     System.out.println("User ID : 4\nRole ID : 1\nPerson Enitity ID : " + new UserAction().getPersonIdByUserId(4,1)); 

    } 

} 

AddStudent.jsp //ページ

答えて

0

この問題では、渡された値にエラーがありました。私はgetPersonIdByUserIdを最初に認証サーブレットに呼び出してから、実際の痛みを引き起こしていたページに再度呼び出しました。他の誰にとっても役立つかもしれません。

関連する問題