0

私はプレイとスカラが初めてです。私はフォームと検証に取り組んでいます。しかし、フォームの複数の検証からすべてのエラーを取得することはできませんでした。

私のフォームタプルは次のようになります。

val companyMapping = Forms.tuple(
    "name" -> nonEmptyText,
    "email" -> email,
    "password" -> nonEmptyText(8),
    "re-password" ->nonEmptyText(8)).verifying(
        // Add an additional constraint: both passwords must match
        "Passwords don't match", data => {
        data._3 == data._4  }
    ).verifying(
        // Second constraint
        "Test error", data => {
            false  }
    )

グローバルエラーとエラーを出力するビューでは、次のようになります。

@println(companyForm.globalError)
@println(companyForm.errors)

そして出力;

Some(FormError(,Passwords don't match,WrappedArray()))
List(FormError(,Passwords don't match,WrappedArray()), FormError(,Test error,WrappedArray()))

この段階では、両方のエラーを出力する方法がまったくわかりません。入力ごとに個別にエラーを表示し、最後にグローバル エラーを表示します。しかし、パスワードが一致すると、グローバル エラーにテスト制約が表示されます。それ以外は、パスワード一致の制約のみを示しています。

これがビュー部分です。

@helper.form(action = routes.Login.register) {

        <div class="row">
            <span class="label">Name</span>
            <input type="text" name="name" placeholder="Company Name" value="@companyForm("name").value" >
            @if(!companyForm.errors("name").isEmpty){

                <span class="error">@Messages(companyForm.errors("name")(0).message,"Company name")</span>
            }
        </div>

        <div class="row">
            <span class="label">Email</span>
            <input type="text" name="email" placeholder="Email" value="@companyForm("email").value" >
            @if(!companyForm.errors("email").isEmpty){
                <span class="error">@Messages(companyForm.errors("email")(0).message,companyForm.errors("email")(0).key)</span>
            }

        </div>

        <div class="row">
            <span class="label">Password</span>
            <input type="password" name="password" placeholder="Password" value="@companyForm("password").value" >
            @if(!companyForm.errors("password").isEmpty){
                <span class="error">@Messages(companyForm.errors("password")(0).message,8)</span>
            }
        </div>

        <div class="row">
            <span class="label">Re-type Password</span>
            <input type="password" name="re-password" placeholder="Re-type your password" value="@companyForm("re-password").value" >
            @if(!companyForm.errors("re-password").isEmpty){
            <span class="error">@Messages(companyForm.errors("re-password")(0).message,8)</span>
            }
        </div>
                   @println(companyForm.globalError)
                   @println(companyForm.errors)
        <div class="row">
            <span class="label"><button type="submit">Save</button></span>
            @companyForm.globalError.map { error =>
               <span class="error">@error.message</span>
            }
        </div>

     }

たぶん、これらのエラーの種類について混乱しているだけです。なので詳しく教えてください。

4

1 に答える 1