Lift アプリケーションを作成しています。ページの 1 つは、Lift デモの「ファイル アップロード」の例に基づいています: http://demo.liftweb.net/file_upload。
そのページのソース コードを見ると ... Lift の「snippet」タグが 2 つの「choose」タグを囲んでいることがわかります。
<lift:snippet type="misc:upload" form="post" multipart="true">
<choose:post>
<p>
File name: <ul:file_name></ul:file_name><br >
MIME Type: <ul:mime_type></ul:mime_type><br >
File length: <ul:length></ul:length><br >
MD5 Hash: <ul:md5></ul:md5><br >
</p>
</choose:post>
<choose:get>
Select a file to upload: <ul:file_upload></ul:file_upload><br >
<input type="submit" value="Upload File">
</choose:get>
</lift:snippet>
これは、ユーザーが初めてページにアクセスしたとき (つまり、GET 要求)、Lift がファイルをアップロードするためのフォームを表示するというものです。ユーザーがフォームを送信すると (つまり、同じページへの POST 要求)、Lift は代わりに処理中のファイルの結果を表示します。
私のアプリケーションでは、「結果」の POST ビューにもフォームを含める必要があるという新しい問題があります。ユーザーが電子メールアドレスを入力するためのテキスト入力と、押されたときに処理されたファイルに関する情報を電子メールで送信する送信ボタンを提供したいと考えています。
...
<choose:post>
<p>
File name: <ul:file_name></ul:file_name><br >
MIME Type: <ul:mime_type></ul:mime_type><br >
File length: <ul:length></ul:length><br >
MD5 Hash: <ul:md5></ul:md5><br >
</p>
<!-- BEGIN NEW STUFF -->
Output: <br/>
<textarea rows="30" cols="100"><ul:output></ul:output></textarea>
<br/><br/>
Email the above output to this email address:<br/>
<ul:email/><br/>
<input type="submit" value="Email"/>
<!-- END NEW STUFF -->
</choose:post>
...
ただし、このページの GET バージョンと POST バージョンの両方が、Lift によって生成された同じフォームによってラップされており、どちらの場合も「アクション」が同じスニペットに設定されています。POST バージョンでフォームのアクションが別のスニペットに変更されるように、これを変更するにはどうすればよいですか?
典型的な Web フレームワークでは、「onclick」イベントと 2 つの基本的な JavaScript 行を使用して、このようなアプローチをとります。しかし、私はまだ Lift のことを理解していません... うーん、Scala で JavaScript を書くことについての興味深い概念です。多分私はその道をたどる必要があるか、あるいはもっと良いアプローチがあるかもしれません.