私のコードは 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 フレームワークを使用しています。