Scala Play框架中的表单

6

你好,我是一个Scala Play框架的初学者。我无法创建包含两个或更多输入的表单。我在谷歌上搜索发现Scala编程语言中没有相关资料。请建议一种有关如何使用Scala创建带有多个输入的表单的方法。我已经尝试了以下代码:

val form = Form (tuple
    (
"firstname"-> text,
"lastname" -> text
)
)  and to get the values val(fname,lname) = form.bindFromRequest.get

我是否正在正确学习Scala Play框架?请提供任何学习Scala Play框架的建议或资源。谢谢。


你是否导入了scala.text?按照@Matt Robots的回答,将其移除并添加适当的导入应该可以解决你的问题。 - binshi
2个回答

26

以下是 Play 2.1.1 的一个完整(但简单)表单示例,包括视图、控制器和路由文件。我怀疑您可能缺少了一些导入或者隐式请求。这两个都是可以理解的!(请参考Scala 表单Scala 操作文档了解更多信息。)

控制器(Application.scala):

package controllers

import play.api._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._

object Application extends Controller {
  val form = Form(
    tuple(
      "firstname" -> text,
      "lastname" -> text
    )
  )

  def index = Action {
    Ok(views.html.index())
  }

  def submit = Action { implicit request =>
    val (fname, lname) = form.bindFromRequest.get
    Ok("Hi %s %s".format(fname, lname))
  }
}

视图(index.scala.html):

<!DOCTYPE html>
<html>
  <head>
    <title>Form example</title>
  </head>
  <body>
    <form method="post" autocomplete="on">
      First name:<input type="text" name="firstname"><br>
      Last name: <input type="text" name="lastname"><br>
      <input type="submit">
    </form>
  </body>
</html>

还有路线:

GET     /                           controllers.Application.index
POST    /                           controllers.Application.submit

NB: 您HTML视图中的名称属性必须与您控制器表单中的字符串文字匹配。

希望这可以帮到您。


有没有办法验证这种类型的表单(它是一个元组而不是一个 case 类),并在验证失败时将结构传递回模板? - nfvindaloo
是的!在Play 2.x文档中有描述,位于“定义约束”下。例如:"firstname" -> nonEmptyText - Matt Roberts
我该如何将它传递到模板中?每当我尝试时,模板都会抱怨Form必须具有通用类型,但在元组的情况下,id却不需要! - nfvindaloo
当我添加第三个输入框时,它会显示 [NoSuchElementException: None.get],你能帮我吗? - Hackaholic
val (fname, lname) = form.bindFromRequest.get 对我来说失败了,出现了类型匹配错误。可能是什么原因呢?不过 val name = form.bindFromRequest.get 运行良好。 - user3292534
这个适用于 Play 2.5.x 吗? - 030

0

Play文档是了解表单的最佳途径 https://www.playframework.com/documentation/2.1.1/ScalaForms 如果您想要更多信息,请查看play-example-form项目。

http://typesafe.com/activator/template/play-example-form 这个关于表单的Activator示例项目解释了有关表单的一切。

1)它解释了在Play控制器中的表单和数据绑定、验证。

2)它解释了表单中的可选参数

3)它解释了带有嵌套对象的复杂表单,例如:

     case class Student(name: String, age: Int, gender: Optional[Char] = None, 
                                                address: Address, other: OtherStuff)

上述的案例类依赖于Address、OtherStuff,注意性别是可选的。示例项目说明了如何处理这样复杂的对象依赖关系。

请从http://typesafe.com/get-started下载activator。然后,使用命令activator ui以浏览器UI模式启动activator,并在搜索中键入play-example-form以下载它。下载后,请转到项目根文件夹并输入activator eclipse(如果您使用eclipse)或activator gen-idea(如果您使用Intellij Idea)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接