scala - 如何在 Lift 中更改表单的操作

标签 scala lift

我正在构建一个 Lift 应用程序,其中一个页面基于 Lift 演示中的“文件上传”示例,网址为:http://demo.liftweb.net/file_upload .

如果你看source code for that page ...您会看到有一个 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 View 需要包含一个表单。我想提供一个文本输入,供用户输入电子邮件地址,以及一个提交按钮,按下该按钮将通过电子邮件发送有关已处理文件的信息:

...
<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 的有趣概念。也许我需要走这条路,或者也许有更好的方法。

最佳答案

首先,我建议您使用 Lift 的新设计器友好型 CSS 绑定(bind),而不是自定义 XHTML 标记。

当您使用 Lift 的代码片段时,您应该记住的一件事是,它是递归的,您可以将 lift 代码片段放入另一个代码片段的 HTML block 中。

例如,如果您希望 POST 之后有另一个表单,则只需将其放入 block 中即可。

<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>
<!-- 
    The following is same as <lift:snippet type="EMailForm" form="post" multipart="true"> 
-->
<form action="" method="post" data-lift="EMailForm">
    <input type="text" name="email"/>
    <input type="submit" />
</form>
</choose:post>

然后在代码片段类 EMailForm 中处理电子邮件表单操作。

最后,您可以使用隐藏表单元素或SessionVar传递文件名/minetype等信息。

关于scala - 如何在 Lift 中更改表单的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952482/

相关文章:

scala - sbt 中命令的更好语法可能吗?

Scala RIA 与 Lift 和

scala - 在特征之间共享泛型

scala - 使用 scala 烟囱将字符串转换为密封特征

scala - 默认情况下禁用调试时如何运行 sbt 测试进行调试?

scala - LogisticRegressionModel 手动预测

scala - 定义自引用 Scala 类(递归类)

scala - 提升:如何使用设计人员友好的模板构建表单?

spring - 如何在 Scala 对象中使用 Spring Autowired(或手动连接)?

scala - Lift 和 Lifty 入门