clojure / compojure / hiccup NullPointerException - PullRequest
3 голосов
/ 28 августа 2011

Трассировка стека, которую я имею, не содержит никаких ссылок на мой код. Я не уверен, как начать выяснять, что может быть не так:

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)))))

Я вижу сбой в трассировке стека, но здесь не выполняется рендеринг страницы. И браузер по-прежнему указывает на исходную страницу, а не на перенаправленную страницу, поэтому я думаю, что перенаправление никогда не происходит.

Идеи

EDIT:

С некоторыми 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)) 

1 Ответ

4 голосов
/ 28 августа 2011

Ну, причина в том, что мое определение маршрута выглядело примерно так:

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

Где мне нужно было передать параметры в вызов create-submit.Поскольку определение параметров create-submit было [& m] Я полагаю, оно не жаловалось на неправильное количество параметров.

ИСПРАВЛЕНИЕ: А также метод model / create выбрасывал, потому что я не добавил требование для файла db.clj, где я и получил свой вызов cql/open-global.

Трассировка стека была совершенно неочевидна - я ожидаю, что она будет указывать на какое-то место в cql / coe!где он пытается установить соединение.Вместо этого он указывал на сбой, который вообще не имеет смысла.

...