2013-06-17 2 views
0

나는 appfuse를 사용하여 J2EE 응용 프로그램을 개발 중이며 easyVolAction이라는 메소드에는 search() 메소드가 포함되어 있습니다. 검색 방법의 결과를 데이터베이스에 저장해야하지만 해당 메소드를 클릭하면 excpetion이 생성됩니다. 액션 검색 :결과 저장시 예외

public TrajetDaoHibernate() { 
     super(TrajetModel.class); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    @SuppressWarnings("unchecked") 
    public List<TrajetModel> getTrajet() { 
     Session session = getSessionFactory().getCurrentSession(); 
     Query qry = session.createQuery("from TrajetModel u order by upper(u.id)"); 
     return qry.list(); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public TrajetModel saveTrajet(TrajetModel trajet) { 
     if (log.isDebugEnabled()) { 
      log.debug("user's id: " + trajet.getId()); 
     } 
     Session session = getSessionFactory().getCurrentSession(); 
     session.saveOrUpdate(trajet); 
     // necessary to throw a DataIntegrityViolation and catch it in UserManager 
     session.flush(); 
     return trajet; 
    } 

    @Override 
    public TrajetModel save(TrajetModel trajet) { 
     return this.saveTrajet(trajet); 
    } 

및 TrajetDao : 객체 trajet .I에 NullPointerException가 TrajetDaoHibernate을 만들어

공용 인터페이스의 TrajetDao는 {

List<TrajetModel> getTrajet(); 

TrajetModel saveTrajet(TrajetModel trajet); 
GenericDao를 확장

}

및 trajetManager :

@Service("trajetManager") 
public class TrajetModelImpl extends GenericManagerImpl<TrajetModel, Long> implements TrajetManager { 

    private TrajetDao trajetDao; 



    @Autowired 
    public void setTrajetModelDao(TrajetDao trajetDao) { 
     this.dao = trajetDao; 
     this.trajetDao = trajetDao; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public TrajetModel getTrajet(String trajetId) { 
     return trajetDao.get(new Long(trajetId)); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public List<TrajetModel> getTrajet() { 
     return trajetDao.getAllDistinct(); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public TrajetModel saveTrajet(TrajetModel trajet) throws TrajetExistsException { 


     try { 
      return trajetDao.saveTrajet(trajet); 
     } catch (DataIntegrityViolationException e) { 
      //e.printStackTrace(); 
      log.warn(e.getMessage()); 
      throw new TrajetExistsException("Trajet '" + trajet.getNom() + "' already exists!"); 
     } catch (JpaSystemException e) { // needed for JPA 
      //e.printStackTrace(); 
      log.warn(e.getMessage()); 
      throw new TrajetExistsException("Trajet '" + trajet.getNom() + "' already exists!"); 
     } 
    } 


} 

finnaly 내가 검색 방법 선언 액션 :

공공 문자열 공들인는() IOException이, TrajetExistsException {

HttpServletRequest request = (HttpServletRequest) FacesContext 
      .getCurrentInstance().getExternalContext().getRequest(); 
    // String url1 = 
    // FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("hidden"); 
    String departAller = request.getParameter("easyVolRobot:villeDepart"); 
    String arriveeAller = request.getParameter("easyVolRobot:villeArrivee"); 
    String jourAller = request.getParameter("easyVolRobot:jourDep"); 
    String moisAller = request.getParameter("easyVolRobot:dateDep"); 
    String jourRetour = request.getParameter("easyVolRobot:jourDep"); 
    String moisRetour = request.getParameter("easyVolRobot:dateArr"); 

    String jourAllerPlus1 = jourAller + 1; 

    parametre = "departAller=" + departAller + "&arriveeAller=" 
      + arriveeAller + "&jourAller=" + jourAller + "&moisAller=" 
      + moisAller + "&jourRetour=" + jourRetour + "&moisRetour=" 
      + moisRetour; 
    parametre1 = "departAller=" + departAller + "&arriveeAller=" 
      + arriveeAller + "&jourAller=" + jourAllerPlus1 + "&moisAller=" 
      + moisAller + "&jourRetour=" + jourRetour + "&moisRetour=" 
      + moisRetour; 

    String response = sendGetRequest(url, parametre); 

    // insert(); 

    PrintStream out = null; 
    try { 
     out = new PrintStream(new FileOutputStream(
       "/data/crawl/root/siteSNCF.html")); 
     out.print(response); 
    } finally { 
     if (out != null) 
      out.close(); 
    } 
    // tableau de resultats des trajets 
    List<TrajetModel> listTrajets = new ArrayList<TrajetModel>(); 
    // trajet 
    //TrajetModel trajet = new TrajetModel(); 

    File input = new File("/data/crawl/root/siteSNCF.html"); 
    Document doc = Jsoup.parse(input, "UTF-8", 
      "http://www.easyvols.org/france-voyage"); 
    for (Element vol : doc.select("div.vols")) { 

     //trajet = new TrajetModel(); 
     for (Element allerRetour : vol.select("div.aller-retour")) { 
      Elements aeroport = allerRetour.select("div.aeroport"); 
      System.out.println(aeroport.text()); 
      Elements depart = allerRetour.select("div.depart"); 
      Elements arrive = allerRetour.select("div.arrivee"); 
      Elements date = allerRetour.select("div.date"); 
      trajet.setNom(aeroport.text()); 
      trajet.setVilleDepart(depart.text()); 
      trajet.setVilleArrive(arrive.text()); 
      trajet.sethArrive(12); 
      trajet.sethDepart(11); 
      trajet.sethReqt(14); 



     } 

     Elements prix2 = vol.select("div.tarif"); 
     trajet.setPrice(prix2.text()); 


      trajet = trajetManager.saveTrajet(trajet); 


     System.out.println(trajet);} 
     return"mainMenu"; 
    } 
+0

NPE가 발생한 줄은 무엇입니까? –

답변

0

이유를 던졌습니다 이 라인을 주석 처리 하시겠습니까?

//TrajetModel trajet = new TrajetModel(); 

TrajetModel을 만드는 다른 행은 없습니다. 해당 개체가 시작되지 않은 경우 여기에서 NPE를 얻습니다.

  trajet.setNom(aeroport.text()); 
+0

나는 이미 다른 클래스의 trajet을 초기화했기 때문에 그 라인에 주석을 달았습니다 – asma

+0

그리고 NPE의 라인은 무엇입니까? –

+0

내가 system.out.println ("aeroport.text()"라고 쓰면) 결과가 null이 아닙니다. – asma