17

次の Compojure の例では、フォーム パラメータの取得に問題があります。

(ns hello-world
  (:use compojure.core, ring.adapter.jetty)
  (:require [compojure.route :as route]))

(defn view-form []
(str "<html><head></head><body>"
   "<form method=\"post\">"
   "Title <input type=\"text\" name=\"title\"/>"
   "<input type=\"submit\"/>"
   "</form></body></html>"))

(defroutes main-routes
  (GET "/" [] "Hello World")
  (GET "/new" [] (view-form))
  (POST "/new" {params :params} (prn "params:" params))
  (route/not-found "Not Found"))

(run-jetty main-routes {:port 8088})

フォームを送信すると、出力は常に

params: {}

タイトル パラメータが params マップにない理由がわかりません。

Compojure 0.6.2 を使用しています。

4

4 に答える 4

16

これは、パラメーターを処理する方法の良い例です

(ns example2
  (:use [ring.adapter.jetty             :only [run-jetty]]
    [compojure.core                 :only [defroutes GET POST]]
    [ring.middleware.params         :only [wrap-params]]))

(defroutes routes
  (POST "/" [name] (str "Thanks " name))
  (GET  "/" [] "<form method='post' action='/'> What's your name? <input type='text' name='name' /><input type='submit' /></form>"))

(def app (wrap-params routes))

(run-jetty app {:port 8080})

https://github.com/heow/compojure-cookies-example

例 2 の下を参照してください - ミドルウェアは機能です

于 2011-11-20T03:54:26.783 に答える
0

2012 年 11 月 17 日時点で実行可能な例を次に示します。

于 2012-11-17T19:20:55.267 に答える
0

パラメータのリストを指定するだけです。compojure は、それに応じて POST/GET パラメータからそれらを自動的に取得します。より複雑なことを行う必要がある場合は可能ですが、その方法については調べたことがありません。たとえば、4clojureのコードのスニペットを次に示します。

(POST "/problems/submit" [title tags description code]
  (create-problem title tags description code))
于 2011-05-17T20:43:00.843 に答える