2

ユーザー登録用のドメインクラスがあります。登録時に、ユーザーは電子メールを2回入力する必要があり、これら2つは一致する必要があります。再入力したメールを保存したくないので、確認のために使用したいだけです。なにか提案を?

私のドメインクラスは次のようになります。

class MyUser{

    String name
    String email
    Integer telephone
 }

私の見解は次のようになります。

<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>

前もって感謝します

4

4 に答える 4

2

これを処理する良い方法は、クラスで一時フィールドを使用することです。

そのようです....

class MyUser{

    static constraints = {
      email (email: true, blank: false) //<-- just a good idea ;)
    }

    String name
    String email
    Integer telephone
    String emailAgain
    static transients = ['emailAgain'] //<-- won't be stored in the database

 }

次に、ビューで、他のフィールドと同じようにフィールドを処理できます...

<g:textField name="email" />
<g:textField name="emailAgain" />

次に、コントローラーで検証します...

def save = {
   def myUser = new MyUser(params);
   if (myUser.email.equals(myUser.emailAgain)){ //<-- maybe make a helper method in the domain class (myUser.doesEmailMatchEmailAgain() ?)
     // do stuff
   }else{
     //handle error, tell user their email's don't match
   }
}
于 2012-05-11T15:19:38.167 に答える
1

別のオプションは、コマンドオブジェクトを使用することです。これらは、フォームの投稿を単一のオブジェクトとして返すという利点を提供します。このオブジェクトは、(ドメインクラスのように)制約とカスタム検証を持つことができます。次に、ユーザーの入力に満足したら、コマンドオブジェクトからの値でドメインオブジェクトを更新できます。

コマンドオブジェクトは、いくつかの場所で送信されるフォームのタイプがある場合に非常に役立ちます(ユーザー登録とユーザー詳細の更新は、コマンドオブジェクトを再利用できるように2つのフォームが類似している例です)。または、ページに複数のドメインオブジェクトを更新するフォームがある場合、またはフォームがドメインオブジェクトに1:1でうまくマッピングされない場合。

私がそれをどれだけうまく説明したかはわかりませんが、彼らは知っておくとよいでしょう。彼らはあなたのユースケースではやり過ぎかもしれませんが。

このページには、パスワードを2回取得して比較する例があります:http://www.intelligrape.com/blog/2009/05/26/command-objects/

于 2012-05-12T02:36:37.343 に答える
0

私はこれを数回行った。1つ目はコントローラーで検証を行うことでしたが、それをクリーンアップして、クライアント側のjqueryで電子メールの検証を行うことを終了しました。

このようにして、一致しない電子メールを何度も行き来する必要はありません。

メールが有効かどうかを確認するためのJavaScript関数の例を次に示します。今、あなたがしなければならないのは、それが最初に入力されたものと再度確認することです。

2番目の電子メール用にフォームに別のフィールドパラメータが必要です。

// simple function to check if a email is of a valid email type
function IsEmail(email) {
  var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

// method to check if email and confermation email is the same.

 $("#signupForm").validate({
rules: {
                ...snip... 
    email1: {
        required: true,
        minlength: 5
    },
    email2: {
        required: true,
        minlength: 5,
        equalTo: "#email1"
    },
               ...snip...
},
messages: {
    ...snip...
    email: {
        required: "Please provide a email",
        minlength: "Your email must be at least 5 characters long"
    },
    email2: {
        required: "Please provide a confermation email",
        minlength: "Your confermation email must be at least 5 characters long",
        equalTo: "Please enter the same email as above"
    },
    ...snip...
}

});

于 2012-05-11T15:21:29.293 に答える
0

メール確認の場合は、サーバー側で完全に忘れてもいいと思います。悪意のある攻撃者を阻止することは決してないので、あなたが言うように、それはあなたのドメインクラスに入れる価値はありません。再入力は間違ったユーザーを助けるだけなので、クライアント側でjavascriptを使用して再入力するだけで十分だと思います。

そうすれば、 jQuery検証プラグインのようなソリューションを簡単に使用できると思います。特別なことは何もありません、私は恐れています。

ここで実用的なデモを見つけることもできます。

于 2012-05-15T07:26:37.930 に答える