2011-08-28 100 views
3

我有堆棧跟蹤不包含任何對我的代碼的引用。我不知道如何開始找出什麼可能是錯在這裏:clojure/compojure /打嗝NullPointerException

LazySeq.java:47 clojure.lang.LazySeq.sval 
LazySeq.java:56 clojure.lang.LazySeq.seq 
Cons.java:39 clojure.lang.Cons.next 
RT.java:560 clojure.lang.RT.next 
core.clj:61 clojure.core/next 
core.clj:461 clojure.core/str$fn[fn] 
core.clj:463 clojure.core/str 
RestFn.java:140 clojure.lang.RestFn.applyTo 
core.clj:540 clojure.core/apply 
core.clj:90 hiccup.core/eval460$fn[fn] 
MultiFn.java:163 clojure.lang.MultiFn.invoke 
Var.java:365 clojure.lang.Var.invoke 
stacktrace.clj:26 ring.middleware.stacktrace/html-ex-view 
stacktrace.clj:40 ring.middleware.stacktrace/html-ex-response 
stacktrace.clj:51 ring.middleware.stacktrace/ex-response 
stacktrace.clj:61 ring.middleware.stacktrace/wrap-stacktrace$fn[fn] 
reload_modified.clj:15 ring.middleware.reload-modified/wrap-reload-modified$fn[fn] 
stacktrace.clj:59 ring.middleware.stacktrace/wrap-stacktrace$fn[fn] 
jetty.clj:17 ring.adapter.jetty/proxy-handler$fn[fn] 
(Unknown Source)  ring.adapter.jetty.proxy$org.mortbay.jetty.handler.AbstractHandler$0.handle 
HandlerWrapper.java:152 org.mortbay.jetty.handler.HandlerWrapper.handle 
Server.java:324 org.mortbay.jetty.Server.handle 
HttpConnection.java:534 org.mortbay.jetty.HttpConnection.handleRequest 
HttpConnection.java:879 org.mortbay.jetty.HttpConnection$RequestHandler.content 
HttpParser.java:741 org.mortbay.jetty.HttpParser.parseNext 
HttpParser.java:213 org.mortbay.jetty.HttpParser.parseAvailable 
HttpConnection.java:403 org.mortbay.jetty.HttpConnection.handle 
SocketConnector.java:228 org.mortbay.jetty.bio.SocketConnector$Connection.run 
QueuedThreadPool.java:522 org.mortbay.thread.QueuedThreadPool$PoolThread.run 

出現這種情況的表單提交後 - 控制器將記錄寫入數據庫,並重定向到頁面:

(defn create-submit [& m] 
    (let [p (model/create m)] 
     (response/redirect (str "/post/" (:id p))))) 

我在堆棧跟蹤中看到了打嗝,但是在這裏沒有頁面呈現。瀏覽器仍然指向原始頁面,而不是重定向頁面,所以我認爲重定向從不發生。

想法?

編輯:

隨着一些的println的我已經跟蹤它的模型/創建調用,這是調用clojureql以連詞!新紀錄。第一個println顯示在控制檯窗口中,第二個不顯示。

(defn create [m] 
    (let [p (new-post-from m)] 
     (println "about to add p to table " (:id p)) 
     (cql/conj! (cql/table :posts) p) 
     (println "after adding p to table") 
    p)) 

回答

4

那麼的原因是我的路線定義看起來是這樣的:

(POST "/post/create/submit" (params :params) (post/create-submit)) 

當我需要向過往PARAMS到創建提交調用。因爲創建提交參數的定義是[& m]我想它沒有抱怨錯誤的參數數量。

更正: 而且模型/創建方法拋出,因爲我沒有添加db.clj文件的要求,這是我的cql/open-global調用。

堆棧跟蹤是完全不明顯的 - 我希望它指向cql/conj下的某個地方!它試圖建立連接。相反,它指向的打嗝完全沒有意義。