我有一个表格,用的是hiccup框架。看起来是这样的:
(form-to {:enctype "multipart/form-data"}
[:post "/add-data"]
...
(submit-button {:class "btn"} "Save")
(submit-button {:class "btn} "Clone"))我如何知道没有使用jQuery/javascript就按下了哪个提交按钮?
我查看了request的Hiccup文档。但是,request元素没有太多的文档。
发布于 2015-01-13 01:00:52
完整的示例如下:
(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"))))请注意,对两个submit按钮使用相同的名称可以让您对结果映射中的"submit“键进行简单查找。
(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代码中对其进行重构变得更加容易。
发布于 2015-01-12 04:58:40
submit-button生成<input type="text" ...>元素。您可以向它们添加"name“和"value”属性:
(submit-button {:name "button" :value "save" :class "btn"} "Save")
(submit-button {:name "button" :value "clone" :class "btn"} "Clone")并在服务器端代码中找到它。在您的例子中使用lib-noir。但是,最近版本的lib-noir不再提供用于销毁请求的实用程序,并鼓励人们使用其他库,如Compojure或bare。
基本上您需要:-确保服务器端应用程序使用wrap-params环型中间件--如果单击上面的“保存”按钮,[:post "/add-data"]的服务器端处理程序应该会收到如下所示的哈希图:
{: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
...
}
...}我希望你能弄清楚如何在这样的地图中找到你所需要的价值。
更深入的阅读:
https://stackoverflow.com/questions/27891597
复制相似问题