我正在構建電梯應用程序,其中一個頁面基於Lift演示中的「文件上載」示例:http://demo.liftweb.net/file_upload。如何在電梯中更改表單的動作
如果你看一下source code for that page ...你看,有一個電梯「片段」標籤,圍繞兩個「選擇」標籤:
<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」事件和兩個基本的JavaScript腳本來處理這種事情。然而,我甚至沒有開始想起Lift的...... err,關於在Scala中編寫JavaScript的有趣概念。也許我需要沿着這條路走下去,或者也許有更好的方法。