scala - Play Framework 2 模板表单 None.get

标签 scala playframework-2.1

我是 Play 2 和 Scala 的新手,我的模板中出现了一个奇怪的异常:

Execution exception
-------------------

[NoSuchElementException: None.get]
In /home/nic/workspaces/scala-ide/scims/app/views/persons/detailTabs/personal.scala.html at line 4.

1. @(personId: Long, personDetailTabForm: Form[dto.PersonDetailTab])(implicit formOptions: dto.PersonFormOptions)
2. @implicitFieldConstructor = @{ helper.FieldConstructor(support.bs3HorizField.f) }
3. 
4. @persons.detail("personal", personDetailTabForm.get.firstName) {

personDetailTabForm 是一个空的表单对象,定义为:
  val personalDetailTabForm: Form[PersonDetailTab] = Form(
    mapping(
      "firstName"     -> text.verifying(nonEmpty),
      "middleName"    -> text,
      "lastName"      -> text.verifying(nonEmpty),
      "gender"        -> text,
      "dateOfBirth"   -> jodaDate("yyyy-MM-dd"),
      "ethnicity"     -> text,
      "maritalStatus" -> text,
      "password"      -> text
    )(PersonDetailTab.apply)(PersonDetailTab.unapply)
  )

关于这里有什么问题的任何想法?

我的印象是一个变量必须是一个选项才能获得一个无?

干杯
NFV

最佳答案

您调用getpersonDetailTabForm - 查找它是 ScalaDoc:http://www.playframework.com/documentation/2.2.x/api/scala/index.html#play.api.data.Form - 似乎 .get返回 PersonDetailTab表单持有的值(value) - 如果,正如文档所说,“提交成功”。

您看到的是 None.get异常(exception),因为很可能是 play.api.data.Form[T]只需使用 Option[T]get返回 Some[T]当表单包含有效值和 None除此以外。

所以在你的第 4 行,在 scala 模板中,你有类似的东西

personDetailTabForm.get.firstName

那是 String ,但只有当表单的底层 PersonDetailTab本身就有值(value)。我不确定您想做什么,但是您正在处理一种情况,即无论出于何种原因,您想要在模板中呈现的值可能不存在。在这种情况下:
@personDetailTabForm.value.map{ personDetailTab => 
  @persons.detail("personal", personDetailTab.firstName) // { ... whatever else
  // anything else you want to render
} getOrElse { // errors in the form; personDetailTabForm cannot yield a valid personDetailTab
  <h3> oops, what went wrong here? </h2>

}

这一切都取决于你想在 personal.scala.html 中做什么. Form[T]是个好办法
处理一些输入和验证T东西,但如果你只是展示它,
如果您有 T (在您的情况下 PersonDetailTab )只需将其传递给模板即可。如果您的 PersonDetailTab可能存在也可能不存在,那么只需使用 Option[PersonDetailTab]而是 Form[PersonDetailTab] .

关于scala - Play Framework 2 模板表单 None.get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408297/

相关文章:

algorithm - 使用 Scala 查找素数。帮我改进

scala - 有没有办法忽略不匹配的情况?

scala - 链接到 scaladoc 的来源?

java - 关闭默认 Play 页面

mongodb - 如何正确映射我的对象以使对象列表在 mongo + play2 中工作

java - 如何在play framework中编写模板测试代码?

scala - Apache Spark - 注册 UDF - 返回数据帧

generics - "Missing parameter type"在采用函数参数的重载泛型方法中

scala - Play Framework 2.1 + ReactiveMongo - 填充多个下拉列表

scala - 如何动态生成大数据流