Xav*_*ing 5 lisp post common-lisp hunchentoot
我尝试实现一个基于Hunchentoot的简单帖子示例.
这是代码:
(define-easy-handler (test :uri "/test") ()
(with-html-output-to-string (*standard-output* nil :prologue t :indent t)
(:html
(:body
(:h1 "Test")
(:form :action "/test2" :method "post" :id "addform"
(:input :type "text" :name "name" :class "txt")
(:input :type "submit" :class "btn" :value "Submit"))))))
(define-easy-handler (test2 :uri "/test2") (name)
(with-html-output-to-string (*standard-output* nil :prologue t :indent t)
(:html
(:body
(:h1 name)))))
Run Code Online (Sandbox Code Playgroud)
我可以正确连接到http://127.0.0.1:8080/test并查看文本输入表单.但是当我提交文本时,我得到一个空白页面,我希望在文本输入中给出一个带有标题的页面.
不确定有什么问题,有人可以建议吗?
将处理程序更改为此
(define-easy-handler (test2 :uri "/test2") (name)
(with-html-output-to-string (*standard-output* nil :prologue t :indent t)
(:html
(:body
(:h1 (str name))))))
Run Code Online (Sandbox Code Playgroud)
然后它应该工作.阅读cl-who文档.特别是有关本地宏的信息.我在这里包括相关文件.
既不是字符串也不是关键字的表单也不是以关键字开头的列表将保留原样,但以下本地宏除外:
看起来像(str形式)的表单将被替换
(let ((result form)) (when result (princ result s)))
(loop for i below 10 do (str i)) =>
(loop for i below 10 do
(let ((#:result i))
(when #:result (princ #:result *standard-output*))))
Run Code Online (Sandbox Code Playgroud)看起来像(fmt form*)的表单将被替换
(format s form*)
(loop for i below 10 do (fmt "~R" i)) => (loop for i below 10 do (format s "~R" i))
Run Code Online (Sandbox Code Playgroud)看起来像(esc形式)的表单将被替换
(let ((result form)) (when result (write-string (escape-string result s))))
Run Code Online (Sandbox Code Playgroud)如果表单看起来像(htm form*)那么每个表单都将受到我们刚刚描述的转换规则的约束,即这是用另一个WITH-HTML-OUTPUT调用包装的主体.
(loop for i below 100 do (htm (:b "foo") :br))
=> (loop for i below 100 do (progn (write-string "<b>foo</b><br />" s)))
Run Code Online (Sandbox Code Playgroud)