Не могу получить сообщение в 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)))))

Я могу правильно подключиться к http://127.0.0.1:8080/test и увидеть форму ввода текста. Но когда я отправляю текст, я получаю пустую страницу, где я ожидал страницу с заголовком, заданным при вводе текста.

Не знаю в чем дело, может кто подскажет?


person Xaving    schedule 11.02.2015    source источник


Ответы (1)


Измените свой обработчик на этот

(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 form), будут заменены на

    (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*))))
    
  • Формы, похожие на (fmt form*), будут заменены на

    (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 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)))
    
person bharath_g    schedule 11.02.2015
comment
Большое спасибо. Оно работает. Я постараюсь уловить это в документации. - person Xaving; 11.02.2015