Forms Clojure(Hiccup):我如何知道表单中按下了哪个提交按钮?
我有一个表单,使用hiccup框架。看起来是这样的:Forms Clojure(Hiccup):我如何知道表单中按下了哪个提交按钮?,forms,clojure,hiccup,Forms,Clojure,Hiccup,我有一个表单,使用hiccup框架。看起来是这样的: (form-to {:enctype "multipart/form-data"} [:post "/add-data"] ... (submit-button {:class "btn"} "Save") (submit-button {:class "btn} "Clone")) {:http-method :post :uri "/add-data" :form-params {"button" "save"
(form-to {:enctype "multipart/form-data"}
[:post "/add-data"]
...
(submit-button {:class "btn"} "Save")
(submit-button {:class "btn} "Clone"))
{:http-method :post
:uri "/add-data"
:form-params {"button" "save"
;; other form data as key/value pairs
;; where: key is input element's "name" attribute and value is input element's "value" attribute
...
}
...}
在不使用jQuery/javascript的情况下,我如何知道按下了哪个提交按钮
我查看了Hiccup的文档以了解
请求
。但是,请求
元素没有太多文档。提交按钮
生成HTML
元素。您可以向其添加“名称”和“值”属性:
(submit-button {:name "button" :value "save" :class "btn"} "Save")
(submit-button {:name "button" :value "clone" :class "btn"} "Clone")
并在服务器端代码中找到它。在您的情况下,使用黑色lib。但最新版本的libnoir不再提供用于解构请求的util,并鼓励人们使用其他库,如Compojure或bare-Ring
基本上你需要:
-确保您的服务器端应用程序使用wrap-params
Ring中间件
-如果单击上面的“保存”按钮,则[:post”/add data“]
的服务器端处理程序应接收如下哈希映射:
(form-to {:enctype "multipart/form-data"}
[:post "/add-data"]
...
(submit-button {:class "btn"} "Save")
(submit-button {:class "btn} "Clone"))
{:http-method :post
:uri "/add-data"
:form-params {"button" "save"
;; other form data as key/value pairs
;; where: key is input element's "name" attribute and value is input element's "value" attribute
...
}
...}
我希望你能想出如何在这样一张地图上找到你需要的价值
更深入的阅读:
完整的示例如下所示:
(ns myapp.routes.home
(:use [hiccup core form])
(:require [compojure.core :refer :all]))
(defn quick-form [& [name message error]]
(html
(form-to {:enctype "multipart/form-data"}
[:post "/form-out"]
(text-field "Hello")
(submit-button {:class "btn" :name "submit"} "Save")
(submit-button {:class "btn" :name "submit"} "Clone"))))
请注意,使用两个提交按钮的相同名称,可以在结果映射中简单查找“提交”键
(defroutes home-routes
(GET "/form-in" [] (quick-form))
(POST "/form-out" [:as request] (str (request :multipart-params))))
打开以下页面时:
http://localhost:3000/form-in
填写表格后,邮递路线的结果为:
{"submit" "Save", "Hello" "hello2"}
顺便说一句,我发现了一篇关于Compojure中的方式的有用的文章,这样可以更容易地在Clojure代码中对其进行分解 但是,我怎样才能知道哪个按钮是从服务器端点击的呢?我正在使用lib-noir,但不知道如何使用它的请求来获取信息。库/框架的服务器端代码各不相同,因此最好在问题中提到lib-noir谢谢!这就是我要找的。