我正在使用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[])
的参数是什么?
感谢您的帮助
答案 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"))