0

我正在使用 appfuse 开发 J2EE 应用程序,我有一个名为 easyVolAction 的 Web 表单,其中包含一个方法 search() 我需要将搜索方法的结果保存在数据库中,但是在单击动作搜索时会生成一个异常:对象 trajet 中的 NullPointerException。我创建了 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!");
       }
   }


}

最后是我声明搜索方法的动作:

公共字符串 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";
    }
4

1 回答 1

0

你为什么评论这条线?

//TrajetModel trajet = new TrajetModel();

我看不到您创建 TrajetModel 的其他行。如果该对象未启动,您将在此处获得 NPE:

            trajet.setNom(aeroport.text());
于 2013-06-17T15:24:53.923 回答