2

私のコードは REPL ではうまく機能しますが、私の Web アプリケーションでは 2 番目の値を取得できません。

例えば(?vehicle=bike&vehicle=car)

私が試したこと

私がする時

  • CLユーザー> (setf |vehicle| '(a b c)
  • CLユーザー> (let ((|vehicle| (multival-plist:getf-all `(:|vehicle| ,|vehicle|) :|vehicle|))) (print (alexandria:flatten (list :vehicle |vehicle|))))

これにより、目的の出力が得られます(:VEHICLE A B C)

しかし、フォームを送信すると

<form action="/checkbox">
    <input type="checkbox" name="vehicle" value="bike"> I have a bike<br>
    <input type="checkbox" name="vehicle" value="car"> I have a car<br>
    <input type="submit" value="Submit">
</form> 

私のルートへ

@route GET "/checkbox"
(lambda (&key |vehicle|)
  (let ((|vehicle| (multival-plist:getf-all `(:|vehicle| ,|vehicle|) :|vehicle|)))
    (format nil "~a" (list :vehicle (alexandria:flatten |vehicle|)))))

実際には結果を djula テンプレートにレンダリングしますが、テストのためformatに代わりに使用します。

<ul>
    {% for a in vehicle %}
        <li>{{ a }}</li>
    {% endfor %}
</ul>

そのうちの 2 つだけ(VEHICLE (bike))がチェックされた結果、

  • 自転車

私が期待すること

出力は

  • 自転車

アプリで 16 個のチェックボックスを使用します。これにより、リンクが非常に長くなり、リンクを短くするよう提案されます。

PS: Hunchentoot サーバーと Caveman2 Web フレームワークを使用しています。

4

1 に答える 1

0

html で に変更name=vehicle するname=vehicle[]と、caveman2 はこれを値のリストとして解析し、("bike" "car")両方が の値としてチェックされている場合にリストを提供しますvehicle

于 2017-11-19T13:36:05.200 に答える