如何仅在创建对象时应用 Play 2 唯一性验证?我可以添加一个自定义verifying
子句,但是在编辑(而不是创建)现有对象时它会失败。
问问题
312 次
2 回答
1
如果您没有对版本和创建执行相同的验证检查,也许这意味着您不应该Form
对两者使用相同的对象?实际上,只有少数特殊情况可以Form
在现实世界的程序中使用相同的对象进行创建和编辑。
另一方面,如果您不想复制一些对创建和编辑都通用的验证逻辑,您可以在两个Form
对象中重用映射片段:
val commonMapping = "common" -> tuple(
"foo" -> number,
"bar" -> nonEmptyText
)
val creationForm = Form(tuple(
commonMapping,
"baz" -> date
) verifying (/* creation specific constraint */))
val editionForm = Form(tuple(
commonMapping,
"bah" -> boolean
))
于 2013-01-13T17:43:39.170 回答
0
我正在我的控制器中执行此解决方法,因为我不知道更好的解决方案:
可以想象,isNew 值检查您的创建情况,在我的情况下,天气一个 seq - 或在创建的情况下为 0 - 通过 url 传递
方法 userExists(userName: String): Boolean 会检查唯一性。
val boundForm = userForm.bindFromRequest()
if(!boundForm.hasErrors) {
val user = boundForm.get // save as form has no errors
if(isNew && userExists(user.getUsername)) {
boundForm = boundForm.copy(value = None, errors = Seq(FormError("", "user exists, choose another name")))
}
}
boundForm.fold(...,...)
于 2013-01-11T12:36:26.180 回答