Scala,创建一个包含超过22个字段的表单

时间:2016-04-22 07:38:08

标签: forms scala playframework

我正在使用scala和Play框架,我想创建一个包含超过22个字段的表单,所以我在3元组中共享我的字段:

val firstMapping = tuple(  
     "f1" -> text, "f2" -> text, ... "f18" -> text
)

val secondMapping = tuple(
    "f19" -> text, "20"-> text ... "f25" -> text
)

val thirdMapping = tuple(
   "f26" -> text, ... "f29" -> text
)

所以在我以一种形式重新组合它们之后:

val createForm = From(tuple(
   "general" -> firstMapping,
   "specific" -> secondMapping,
   "more_specific" -> thirdMapping
))

我认为这是一个很好的解决方案,但我的问题是视图文件(我在MVC架构中)

在那个视图中,我想传递我的表格:

@(formCreate: Form[])

但是我不知道我需要在“[]”中添加什么(我是法语我不知道wath是英语中的那个词)以及如何在HTML中创建我的字段?

通常我使用那种html形式:

@helper.form() {
    <input type="text" name="id_metier" id="id_metier" maxlength="255"/>
}

那么我可以再次使用那种字段,还是需要使用Play框架中的特定字段?那个@(formCreate: Form[])的参数是什么?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您的表单属于Tuple3类型,其中包含一些其他元组。阅读,写作,使用,维护都很痛苦。

Form[((String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), (String, String, String, String, String, String, String), (String, String, String, String))]

请参阅文档:https://www.playframework.com/documentation/2.5.x/ScalaForms

只需为您的数据创建一个case class,其中包含3个嵌套case classes,名称字段相应。

以下是嵌套case class

的文档示例
case class AddressData(street: String, city: String)
case class UserAddressData(name: String, address: AddressData)

val userFormNested: Form[UserAddressData] = Form(
  mapping(
    "name" -> text,
    "address" -> mapping(
      "street" -> text,
      "city" -> text
    )(AddressData.apply)(AddressData.unapply)
  )(UserAddressData.apply)(UserAddressData.unapply)
)

创建表单时,请引用带有.表示法的嵌套字段

@helper.inputText(userFormNested("name"))
@helper.inputText(userFormNested("address.street"))
@helper.inputText(userFormNested("address.city"))