如果传入请求的字段少于预期,如何使映射功能起作用

时间:2017-01-09 06:54:58

标签: scala playframework

我正在尝试播放/ 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字段。有没有一种方法可以使表单包含的字段少于映射所需的字段。我不是在谈论带有空/可选值的表单中的字段。我根本不想把字段放在表格中。

1 个答案:

答案 0 :(得分:2)

我通常创建一个表示表单数据的case类(可能不是来自domain类的所有信息),并且在控制器/服务中我使用自己的规则创建域实体(例如,a的默认值)字段上没有表示的字段)