我想使用密码确认进行注册表单并复制此示例 https://github.com/namin/play-js-validation
但发生类型不匹配
scala 2.11 玩2.5
object SignUpForm {
val form = Form(
mapping(
"firstName" -> nonEmptyText,
"lastName" -> nonEmptyText,
"email" -> nonEmptyText,
// "password" -> nonEmptyText
"password" ->
tuple(
"main" -> nonEmptyText,
"confirm" -> nonEmptyText
).verifying("Passwords don't match",passwords => passwords._1 == passwords._2)
)(Data1.apply)(Data1.unapply)
)
// The mapping signature doesn't match the User case class signature,
// so we have to define custom binding/unbinding functions
{
// Binding: Create a User from the mapping result (ignore the second password and the accept field)
(firstName, lastName, email, passwords, _) => Data2(firstName, lastName, email, passwords._1)
}
case class Data1(
firstName: String,
lastName: String,
email: String,
password1: String,
password2: String
)
case class Data2(
firstName: String,
lastName: String,
email: String,
password: String
)
}
类型不匹配; found:(String,String,String,String,String)=> forms.SignUpForm.Data1 required:(String,String,String,(String,String))=> ?
[error] /root/play-silhouette-seed/app/forms/SignUpForm.scala:25: type mismatch;
[error] found : (String, String, String, String, String) => forms.SignUpForm.Data1
[error] required: (String, String, String, (String, String)) => ?
[error] )(Data1.apply)(Data1.unapply)
[error] ^
[error] /root/play-silhouette-seed/app/forms/SignUpForm.scala:25: missing argument list for method unapply in object Data1
[error] Unapplied methods are only converted to functions when a function type is expected.
[error] You can make this conversion explicit by writing `unapply _` or `unapply(_)` instead of `unapply`.
[error] )(Data1.apply)(Data1.unapply)
[error] ^
[error] /root/play-silhouette-seed/app/forms/SignUpForm.scala:32: missing parameter type
[error] (firstName, lastName, email, passwords, _) => Data2(firstName, lastName, email, passwords._1)
[error] ^
[error] /root/play-silhouette-seed/app/forms/SignUpForm.scala:32: missing parameter type
[error] (firstName, lastName, email, passwords, _) => Data2(firstName, lastName, email, passwords._1)
[error] ^
[error] /root/play-silhouette-seed/app/forms/SignUpForm.scala:32: missing parameter type
[error] (firstName, lastName, email, passwords, _) => Data2(firstName, lastName, email, passwords._1)
[error] ^
[error] /root/play-silhouette-seed/app/forms/SignUpForm.scala:32: missing parameter type
[error] (firstName, lastName, email, passwords, _) => Data2(firstName, lastName, email, passwords._1)
[error] ^
[error] /root/play-silhouette-seed/app/forms/SignUpForm.scala:32: missing parameter type
[error] (firstName, lastName, email, passwords, _) => Data2(firstName, lastName, email, passwords._1)
[error] ^
[error] 7 errors found
[error] (compile:compileIncremental) Compilation failed
[error] application -
也许案例类Data1应该被修改但是brace()不能嵌套。例如,
case class Data1(
firstName: String,
lastName: String,
email: String,
(password1: String,
password2: String)
)
发生错误
5/24(2小时后) 重写但发生意外的异常。不知道在哪里插入.verifying()
[模型]
case class Data(
firstName: String,
lastName: String,
email: String,
password: forms.SignUpForm.PassData
)
case class PassData(
main: String,
confirm: String
)
[signupform]
val form = Form[Data](
mapping(
"firstName" -> nonEmptyText,
"lastName" -> nonEmptyText,
"email" -> nonEmptyText,
// "password" -> nonEmptyText
"password" -> mapping(
"main" -> nonEmptyText,
"confirm" -> nonEmptyText
)(PassData.apply)(PassData.unapply)
// following .verifying is not appropriate
.verifying("Passwords don't match",password => password.main == password.confirm)
//(PassData.apply)(PassData.unapply)
)(Data.apply)(Data.unapply)
)
CreationException:无法创建注入器,请参阅以下错误:
1) Error injecting constructor, org.quartz.SchedulerException: Scheduler with name 'QuartzScheduler~application' already exists.
at jobs.Scheduler.<init>(Scheduler.scala:18)
at modules.JobModule.bind(JobModule.scala:10) (via modules:
com.google.inject.util.Modules$OverrideModule -> modules.JobModule)
while locating jobs.Scheduler
5/24(4小时后) 发现了这个问题并解决了。 play framework form validation in scala
val form = Form[Data](
mapping(
"firstName" -> nonEmptyText,
"lastName" -> nonEmptyText,
"email" -> nonEmptyText,
"main" -> nonEmptyText,
"confirm" -> nonEmptyText
)(Data.apply)(Data.unapply)
verifying("Passwords don't match", password => password.main == password.confirm)
)
case class Data(
firstName: String,
lastName: String,
email: String,
main: String,
confirm: String
)
答案 0 :(得分:0)
尝试使用嵌套表单https://www.playframework.com/documentation/2.6.x/ScalaForms#nested-values
您可以为密码创建一个字段,并在密码字段中嵌套两个字段。