使用密码确认在注册表单上键入不匹配

问题描述 投票:1回答:1

我想用密码确认进行注册表格并复制此样本https://github.com/namin/play-js-validation

但类型不匹配发生

规模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 - 

也许case类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
  )
scala playframework
1个回答
0
投票

尝试使用嵌套表单https://www.playframework.com/documentation/2.6.x/ScalaForms#nested-values

您可以为密码创建一个字段,并在密码字段中嵌套两个字段。

© www.soinside.com 2019 - 2024. All rights reserved.