2013-05-31 51 views
5

你好,我是一个scala玩框架的初学者。我无法创建带有两个或更多输入的表单。我GOOGLE了它,并没有在scala编程语言中找到。请向我建议如何使用scala在表单中创建多个输入。我做了这个斯卡拉玩框架中的表格

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

我按照正确的方式。请向我建议学习scala play框架的任何想法或资源。在此先感谢

+0

你有没有机会导入scala.text?删除它并添加@Matt机器人的相应导入应该可以解决您的问题。 – binshi

回答

26

这是一个完整的(但简单)的表单示例为Play 2.1.1。包括视图,控制器和路由文件。我怀疑你是missing imports和/或implicit request。这两个都是可以理解的!

控制器(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视图中的名称属性必须与控制器表单中的字符串文字相匹配。

希望有帮助。

+0

有没有办法验证这种类型的表单(它是一个元组而不是一个案例类),并在验证失败时将结构传递回模板? – nfvindaloo

+0

是的!它在“定义约束”下的[Play 2.x文档](http://www.playframework.com/documentation/2.0/ScalaForms)中有描述。例如:''firstname“ - > nonEmptyText'。 –

+0

我怎样才能将它传递给模板?每当我尝试模板时抱怨Form必须有一个泛型类型,但是在为一个元组显示的情况下,id不会!? – nfvindaloo

0

玩文档是了解表格的最佳方式 https://www.playframework.com/documentation/2.1.1/ScalaForms如果您想要更多,请查看play-example-form项目。

http://typesafe.com/activator/template/play-example-form此表单上的激活器示例项目解释了有关表单的所有信息。

1)它解释了播放控制器中的表单和数据绑定,验证。

2)它在表格中解释了关于Optional parameters

3)它解释了关于与嵌套对象复杂的形式例如

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

上述情况类取决于地址,OtherStuff和 通知,性别是可选的。该示例项目解释了如何处理这种复杂的对象依赖性。

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

+0

'不是一个有效的命令:gen-idea' – 030