2015-02-11 71 views
4

我尝试实现一个基于Hunchentoot的简单后期示例。无法在LISP 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))))) 

我可以正确连接到http://127.0.0.1:8080/test和看到的文字输入方式。但是当我提交文本时,我得到一个空白页面,我期待在文本输入中给出标题的页面。

不知道什么是错,任何人都可以建议吗?

回答

5

处理程序改成这样

(define-easy-handler (test2 :uri "/test2") (name) 
    (with-html-output-to-string (*standard-output* nil :prologue t :indent t) 
    (:html 
    (:body 
    (:h1 (str name)))))) 

那么它应该工作。阅读cl-who文档。 尤其是关于本地宏的信息。 我在这里包括相关文档。

一种形式,既不是字符串,也不是一个关键字,也不能与关键字开头的列表将保持原样,除了以下本地宏:

  • 形式,看起来像(STR形式)将与该像(FMT形式*)

    ​​
  • 形式取代将与

    (format s form*) 
    
    (loop for i below 10 do (fmt "~R" i)) => (loop for i below 10 do (format s "~R" i)) 
    
  • 被取代种
  • 形式,看起来像(ESC形式)将与

    (let ((result form)) (when result (write-string (escape-string result s)))) 
    
  • 被取代,只要一个形式如下(HTM格式*),那么每一表格将受到我们只是描述转换规则,也就是说,这个主体是用另一个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))) 
    
+0

非常感谢。有用。我会尽力在文档中说明这一点。 – Xaving 2015-02-11 12:58:53