我的表单如下:
case class RegistrationForm(department: Option[String], name: String, email: String, employeeId: Option[Int])
现在我需要做的是,如果用户输入department
输入,那么employeeId
应为None。如果他们将department
留空,则employeeId
将成为必填字段。
我的映射目前是这个,但它没有处理这个逻辑:
val registrationForm = Form(
mapping(
"department" -> optional(String)
"name" -> nonEmptyText,
"email" -> nonEmptyText,
"employeeId" -> optional(number)
)(RegistrationForm.apply)(RegistrationForm.unapply)
)
另外,在我的表单中,如何创建隐藏的输入字段并将其绑定到我的表单属性,因为有时我的网址会像:
/users/register?employeeId=293838
所以我想创建:
<input type="hidden" name="employeeId" value="???" />
所以这个employeeId隐藏的输入应该绑定到表单。
答案 0 :(得分:2)
您可以使用verifying
在表单字段之后构建约束它们都已成功绑定到案例类。
val registrationForm = Form(
mapping(
"department" -> optional(String)
"name" -> nonEmptyText,
"email" -> nonEmptyText,
"employeeId" -> optional(number)
)(RegistrationForm.apply)(RegistrationForm.unapply)
.verifying("Some error message..", reg =>
(reg.department.isEmpty || reg.employeeId.isEmpty) && (reg.department.nonEmpty || reg.employeeId.nonEmpty)
)
)
verifying
的第一个参数是在约束被破坏时使用的错误消息,第二个参数是您绑定到的返回Boolean
的案例类的函数。如果函数返回false
,则Form
将包含全局错误。我不是100%肯定这是你在我的例子中的逻辑,因为你的措辞有点奇怪(听起来你正在描述异或)。如果需要,您还可以将多个verifying
操作链接在一起。
我不确定你对隐藏字段的问题是什么。 html表单中的隐藏字段将与其他所有内容一起发送到服务器,并像任何其他字段一样绑定。