保存结果时出现异常

时间:2013-06-17 15:19:39

标签: java java-ee dao appfuse

我正在使用appfuse开发J2EE应用程序,我有一个名为easyVolAction的webform,其中包含方法search()我需要将搜索方法的结果保存在数据库中,但是当单击动作搜索时会产生一个excpetion:NullPointerException in object trajet。我创建了TrajetDaoHibernate:

 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:

公共接口TrajetDao扩展了GenericDao {

List<TrajetModel> getTrajet();

TrajetModel saveTrajet(TrajetModel trajet);

}

和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!");
       }
   }


}

我宣布搜索方法的行动:

public String recherche()抛出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";
    }

1 个答案:

答案 0 :(得分:0)

为什么要评论这一行呢?

//TrajetModel trajet = new TrajetModel();

我没有看到您创建TrajetModel的其他行。 如果没有启动该对象,您可以在此处获取NPE:

            trajet.setNom(aeroport.text());