我正在构建一个 Lift 应用程序,其中一个页面基于 Lift 演示中的“文件上传”示例,网址为:http: //demo.liftweb.net/file_upload。
如果您查看该页面的源代码......您会看到有一个 Lift“snippet”标签,围绕着两个“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”事件和两行基本的 JavaScript 来处理这样的事情。然而,我什至还没有开始思考 Lift 的……呃,关于在 Scala 中编写 JavaScript 的有趣概念。也许我需要走那条路,或者也许有更好的方法。