0

appfuse を使用して J2EE アプリケーションを開発しています。メソッド search() を含む easyVolAction という Web フォームがあります。検索メソッドの結果をデータベースに保存する必要がありますが、オブジェクト trajet のアクション search :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!");
       }
   }


}

最後に、検索メソッドを宣言するアクション:

public String recherche() throws 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 に答える