Hunchentoot处理程序,用于动态数量的参数

时间:2014-08-25 12:10:29

标签: common-lisp hunchentoot

我希望能够处理使用动态数量的表单字段的表单

e.g。

(form :action "/theaction"
      :method "post"
      (input :type "text" :name "firstinput") (:br)
      (dotimes (i n)
         (:input :type "text" :name (FORMAT nil "INPUT~a" i)))
      (:input :type "submit" :value "submit" :name "submit"))

如何定义处理程序,因为&rest不被接受,并且不允许我访问我显然需要进一步处理的变量名。

(define-easy-handler (theaction :uri "/theaction") (&special-rest all-params)
   (log-message* :INFO "~a" all-params))

-> "(("firstinput" . "value") ("INPUT0" . "value") ("INPUT1" . "value") ...)"

一种可能性是预先定义所有变量,例如: 100,但这似乎相当麻烦和不直观。

1 个答案:

答案 0 :(得分:3)

define-easy-handler的lambda列表只是使用较低级别调用的快捷方式。您可以使用GET-PARAMETERPOST-PARAMETER等功能获得更广泛的参数访问权限。您可以在处理程序正文中使用get-parameters*(或post-parameters*)来获取所有参数的列表。