2017-08-27 11 views
0

私は本当に奇妙な状況に陥っています。私はhibernate関数を呼び出してDBから項目を読み込みますが、それはほとんどの場所で動作しますが、ただ一つの場所で動作していないので、私にNullPointerExceptionを与えています。私は本当に小さな何かがコードにないと思うが、私はそれが何であるか分からない。ここを見てみましょう:私は、関数を呼び出す奇妙な状況でjava.lang.NullPointerExceptionが発生する

Servletれる:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     String dataA = request.getParameter("answers"); 
     String dataQ = request.getParameter("quests"); 
     String user = request.getParameter("usern"); 
     String chap = request.getParameter("chapt"); 

     String[] answers = dataA.split(","); 
     String[] quests = dataQ.split("&"); 


     TestHandler tHandler = new TestHandler(5); 
     UserDAO u=new UserDAO(); 
     UserChapterDAO uc = new UserChapterDAO(); 


     ChapterDAO chdao = new ChapterDAO(); 
     Chapter myCh=chdao.findTChapter(chap+""); 

     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println(chap); 
     out.println(myCh.getId()); 

休止方法:

@SuppressWarnings("unchecked") 
     public Chapter findTChapter(String title) { 

      List<Chapter> chapter = null; 
      Transaction tx=null; 

       try{ 
        Configuration configuration = new Configuration().configure("hibernate.cfg.xml"); 
        SessionFactory sessionFactory = configuration.buildSessionFactory(); 
        Session session = sessionFactory.openSession(); 
        tx = session.beginTransaction(); 

       Query query = session.createQuery("FROM Chapter WHERE title = :title"); 
       query.setParameter("title", title); 
       chapter = query.list(); 
       tx.commit(); 
      } catch (HibernateException e) { 
       if (tx != null) { 
        tx.rollback(); 
       } 
       LOGGER.error("", e); 
      } 

       return chapter != null && !chapter.isEmpty() ? chapter.get(0) : null; 
     } 

エラートレース:

SEVERE: Servlet.service() for servlet [TestServlet] in context with path [/HibernateWebApp] threw exception 
java.lang.NullPointerException 
    at controller.TestServlet.doPost(TestServlet.java:76) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 
    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) 

サーブレットマッピングがあります次のもの:

<servlet> 
    <display-name>Test</display-name> 
    <servlet-name>TestServlet</servlet-name> 
    <servlet-class>controller.TestServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>TestServlet</servlet-name> 
    <url-pattern>/test</url-pattern> 
    </servlet-mapping> 

とサーブレットを呼び出すJSP部分:

<form class="form-horizontal" action="test" method="POST"> 

         <div class="form-group"> 
         <input type="hidden" id="answers" name="answers"> 
         <input type="hidden" id="quests" name="quests" value="<%out.println(q); %>" > 
         <input type="hidden" id="chatp" name="chapt" value="<%out.println(request.getParameter("chapter")); %>"> 
         <button type="submit" class="btn btn-success btn-md" id="finish" style="display:none;">Finish</button> 

          </div> 
         </form> 

エラーがout.printlnを(myCh.getId())でapearsので、IDは、実際にはDBからの章を読んでないとmyChオブジェクトに格納します。 私がこれを使用している他の場所では、それは完全に動作します。また、実際のStringにString Chapをハードコーディングして関数を呼び出すと、動作しています。そして、私はout.println(chap)でそれを印刷するので、String chapがJSPから完全に取得されたことも確信しています。

私は本当にそこにこだわっています。何か案は?

+0

'章myCh = chdao.findTChapter(CHAP + "");' は、あなたが 'chap'と取得を印刷することができれば、あなたが' myCh' 用**ヌル**値を受け取るかどうかを確認することができます**ヌル** myCh'の値、あなたは 'findTChapter'メソッドをデバッグする必要があります。 –

+0

はい、それはヌルです、私はそれをチェックしました –

+0

'chap'は値を持ち、' ​​findTChapter'はヌルを返しますか? –

答えて

0

まず最初

Query query = session.createQuery("FROM Chapter c WHERE c.title = :title"); 
+0

それは私に同じことを与えます:(実際には休止状態の機能に問題はないと信じていますが、それ以外のケースでは動作しています) –

0

この文字列で検索してください: String chap = request.getParameter("chapt");

に変更し、それを: String chap = request.getParameter("chapter");

はまた、あなたのアクションURLがフォームであるかどうかを確認します。 http://appurl/test?chapter=abcd

+0

はい、URLには必要な章のフォームがあります。私は同じ結果を与えている、あなたの例外がオフになるかどうか –

+0

とても奇妙時にコメント、この行:。 'の

+0

同じもの。私はその入力を削除して、urlパラメータを読み込もうとしましたが、あなたはそれをテストして確認することができます。println(request.getParameter( "chapter"));%> ">' ?? また、入力をテキストとして入力すると、その値も正しい値になります –

0

Typo。あなたは同意するあなたのIDと名前とパラメータ名を取得してください

String chap = request.getParameter("chapt"); 

しかし

<input type="hidden" id="chatp" name="chapt" value="<%out.println(request.getParameter("chapter")); %>"> 

を持っています。

+0

それはパラメータの右ハハ、関係なく、typoを持っている:) –

関連する問題