1

ring.util.anti-forgery を使用して偽造防止トークンを html フォームに挿入しようとしています。

(html/defsnippet post-edit-form "templates/blog.html" [:.post-edit]
   []
   [:form] (html/after (html/html-content (anti-forgery-field))))

例外を取得:

java.lang.IllegalArgumentException
Don't know how to create ISeq from: net.cgrand.enlive_html$html_content$fn__5571
RT.java:505 clojure.lang.RT.seqFrom
RT.java:486 clojure.lang.RT.seq
core.clj:133    clojure.core/seq
enlive_html.clj:227 net.cgrand.enlive-html/flatten-nodes-coll[fn]
enlive_html.clj:232 net.cgrand.enlive-html/flatten-nodes-coll[fn]
LazySeq.java:40 clojure.lang.LazySeq.sval
...

これも試しました:

(html/defsnippet post-edit-form "templates/blog.html" [:.post-edit]
  []
  [:form] (html/after (html/html [:input {:id "__anti-forgery-token"
                                          :name "__anti-forgery-token"
                                          :type "hidden"
                                          :value *anti-forgery-token*}])))

動作しません :(

(anti-forgery-field) は、1 つの「入力」を持つ html 文字列のみを生成します。しかし、私はそれをフォームに挿入することはできません。

4

1 に答える 1

3

やった!

html-content の代わりに html-snippet を使用する必要があります:

(html/defsnippet post-edit-form "templates/blog.html" [:.post-edit]
  []
  [:form] (html/append (html/html-snippet (anti-forgery-field))))
于 2014-10-21T08:15:49.630 に答える