我是 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
最佳答案
您调用get
在 personDetailTabForm
- 查找它是 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/