Scala 如何在视图中创建只读字段
我有一个包含两个字段的表单-Scala 如何在视图中创建只读字段,scala,playframework-2.0,Scala,Playframework 2.0,我有一个包含两个字段的表单-empno和name。两者都用默认值填充。在视图中显示时,我希望empno是只读的,name是可编辑的 在视图创建中,我使用@leaveform.value.get.empno仅显示就绪并正常工作。该问题仅在插入过程中出现,错误为([NoTouchElementException:None.get]) 问题: 问题是返回错误没有value属性。我还可以使用什么来获取该值 我是否可以跳过只读字段的@inputText 请参阅以下我的代码: // ***** CONTRO
empno
和name
。两者都用默认值填充。在视图中显示时,我希望empno
是只读的,name
是可编辑的
在视图创建中,我使用@leaveform.value.get.empno
仅显示就绪并正常工作。该问题仅在插入过程中出现,错误为([NoTouchElementException:None.get])
问题:
@inputText
// ***** CONTROLLER *****//
val leaveform = Form[LeaveModel](
mapping(
"empno" -> nonEmptyText,
"name" -> nonEmptyText
)((no, empno) => LeaveModel(empno, name))
((leave: LeaveModel) => Some(leave.empno, leave.name))
)
def create = withAuth { username => implicit request =>
// Define default values
val empno = "STUDENT"
val name = ""
// Set default values
val filledForm = leaveform.fill(LeaveModel(empno,name))
Ok(html.leave.form(filledForm))
}
def insert = Action (
implicit request => {
leaveform.bindFromRequest.fold(
error => {
BadRequest(html.leave.form(error)) // Question 1. Here is the error.
},
leave => {
LeaveModel.insert(leave)
Redirect(routes.indexController.index())
}
)
}
)
// ***** VIEW START***** //
@(leaveform: Form[LeaveModel])
@leaveform.value.get.empno
@helper.form(
action = (routes.LeaveController.update(oid)),
'id -> "leaveform") {
@inputText(leaveform("empno")) // Question 2.
@inputText(leaveform("name"))
}
不强制使用表单帮助程序。如果使用它们,可以传递属性
readonly
,或者使用CSS设置字段样式,使其看起来是只读的
- CSS禁用的Twitter引导:
@inputText( editForm("createdOn"), 'id -> "createdOn", 'class -> "input-xlarge disabled", '_label -> Messages("createdOn"), '_help -> "" )
- 传递可选属性:
readonly
@inputText( editForm("createdOn"), 'id -> "createdOn", 'class -> "input-xlarge", '_label -> Messages("createdOn"), 'readonly -> "readonly", '_help -> " This is read only" )
- 也可以不重新发送字段,而是显示其值:
<span class="date">Created on: @editForm("createdOn").value</span>
创建于:@editForm(“createdOn”).value
- 更新2018-01-24
可选的。这意味着您可以从如下字段中获取值:
@form(“fieldName”).getValue.get
(可以抛出一个NPE
)
@form(“fieldName”).getValue.getOrElse(“defaultValue”)
将表单返回给用户时,尝试使用Flash上下文:
def create = withAuth { username => implicit request =>
// leaveForm initialization as before
// use form data from flash if present
val form = if (flash.get("error").isDefined)
leaveForm.bind(flash.data)
else
leaveForm
Ok(stakeholders.register(form))
}
def insert = Action { implicit request =>
leaveForm.bindFromRequest.fold(
hasErrors = { form =>
Redirect(routes.Leaves.create). // put correct route here
flashing(Flash(form.data) +
("error" -> Messages("validation.errors"))) // customize error message
},
leave => {
LeaveModel.insert(leave)
Redirect(routes.indexController.index())
}
)
}
HTH,Erich我使用的是scala 2.0.3,没有字段方法。我的代码->'@leaveform.field(“status”).value'和return error'value字段不是play.api.data.Form[models.LeaveModel]'的成员。hmm。。我使用的是java,但文档上说:您还可以使用@elements.field:.访问原始字段。@SimonSiah尝试使用@leaveform(“status”)。value
相反,我没有使用Scala表单的经验,无论如何,这应该是可行的。此代码在表单创建过程中运行良好,并返回错误@forField(“name”)(value=>value.value.get)。谢谢大家的帮助。