10

Compojureは、POSTフォームのフィールドをバインドしません。これは私のルート定義です:

(defroutes main-routes
  (POST "/query" {params :params}
    (debug (str "|" params "|"))
    "OK...")
)

フィールドを含むフォームを投稿すると、| {} |が表示されます。つまり、パラメーターはありません。ちなみに、http:// localhost / query?param1 = value1に移動すると、paramsは空ではなく、値はサーバーコンソールに出力されます。

フォームフィールドに別のバインディングはありますか?

4

3 に答える 3

15

id = "zzz"だけでなく、name="zzz"属性の入力フィールドがあることを確認してください。

htmlフォームはすべての入力を収集し、name属性を使用してそれらを投稿します

my_post.html

<form action="my_post_route" method="post">
    <label for="id">id</label> <input type="text" name="id" id="id" />
    <label for="aaaa">aaa</label> <input type="text" name="aaa" id="aaa" />
    <button type="submit">send</button>
</form>

my_routes.clj

(defroutes default-handler
  ;,,,,
  (POST "/my_post_route" {params :params} 
    (str "POST id=" (params "id") " params=" params))
  ;,,,,

次のような応答を生成します

id = 21 params = {"aaa" "aoeu"、 "id" "21"}

于 2010-10-05T14:45:48.760 に答える
4

これは、パラメーターの処理方法の優れた例です。

(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:52:49.767 に答える
0

注:(params "id")はnilを返します、(params:id)で正しい値を取得します

于 2019-10-16T12:50:17.333 に答える