我正在尝试播放/ scala。我有两个案例类,我想将表格中的数据映射到这个模型
case class User (
name:String,
age:Int,
female:Boolean,
address:Address
)
case class Address (
fullStreet:String,
county:String,
country:String
)
在控制器类中,我有以下映射函数和操作定义
val userForm = Form((mapping("name"->text,
"age"->number,
"female"->boolean,
"address"->mapping("fullStreet"->text,
"county"->text,
"country"->text)(Address.apply)(Address.unapply)
)(User.apply)(User.unapply)))
def post = Action { implicit request =>
val u:Form[User] = userForm.bindFromRequest
Ok(views.html.dataIndex(u))
}
我面临以下问题:要使完整代码正常工作,我必须创建一个包含映射所需的所有字段的表单,如下所示:
<h1>Feed User Data</h1>
@helper.form(action=routes.Data.post){
@helper.inputText(userForm("name"))
@helper.inputText(userForm("age"))
@helper.checkbox(userForm("female"))
<fieldset>
@helper.inputText(userForm("address.fullStreet"),'_label -> "Full Street")
@helper.inputText(userForm("address.county"),'_label -> "County")
@helper.select(userForm("address.country"),Seq(""->"---",
"United Kingdom"->"UK",
"France"->"FR") )
</fieldset>
<input type="submit" name="send" value="submit"/>
}
如果我创建一个只包含name的输入字段的表单,那么bindFromRequest将返回None而不是仅映射name字段。有没有一种方法可以使表单包含的字段少于映射所需的字段。我不是在谈论带有空/可选值的表单中的字段。我根本不想把字段放在表格中。
答案 0 :(得分:2)
我通常创建一个表示表单数据的case类(可能不是来自domain类的所有信息),并且在控制器/服务中我使用自己的规则创建域实体(例如,a的默认值)字段上没有表示的字段)