Compojure不绑定POST表单中的字段。这是我的路线def:
(defroutes main-routes
(POST "/query" {params :params}
(debug (str "|" params "|"))
"OK...")
)
当我发布包含字段的表单时,我得到| {} |,即没有参数。顺便说一下,当我转到http://localhost/query?param1=value1时,params不为空,并且值将打印在服务器控制台上。
表单字段是否有另一个绑定?
答案 0 :(得分:13)
确保您的输入字段具有name =“zzz”属性,但不仅仅是id =“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”}
答案 1 :(得分:3)
这是如何处理参数的一个很好的例子
(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 - 中间件是功能
答案 2 :(得分:0)
注意: (params“ id”)为我返回nil,我用(params:id)得到一个正确的值