私は本当に奇妙な状況に陥っています。私は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から完全に取得されたことも確信しています。
私は本当にそこにこだわっています。何か案は?
'章myCh = chdao.findTChapter(CHAP + "");' は、あなたが 'chap'と取得を印刷することができれば、あなたが' myCh' 用**ヌル**値を受け取るかどうかを確認することができます**ヌル** myCh'の値、あなたは 'findTChapter'メソッドをデバッグする必要があります。 –
はい、それはヌルです、私はそれをチェックしました –
'chap'は値を持ち、' findTChapter'はヌルを返しますか? –