2017-10-23 4 views
0

は私がCheck if username already exists in the register formユーザー名および/または電子メールがすでに

私がログインフォームを書いていますし、私はどのように把握しようとしていますように、ここにいくつかのスレッドを見てきましたが存在するかどうかを確認するために、JSFバリデータを使用する方法WSFバリデーターを使用して、weitherを検証するか、userNameまたは電子メールアドレスがすでにデータベースに存在していないかを検証します。 私はすでに自分のPOJOでこのメソッドを設定していますが、Javaのデターマナイズや存在しないことで正常に動作します。私の問題は、画面にメッセージを戻す方法とそれをリンクする方法にあります。

この

は私のXHTMLです:

<!--UserName form group--> 
         <div class="form-group has-feedback" id="CAuserNameFormGroup"> 
          <!-- --> 
          <div class="input-group" id="CAuserNameInputGroup"> 
           <!-- --> 
           <span class="input-group-addon"><i class="glyphicon glyphicon-user" id="CAuserNameLeftGlyph"></i></span> 
           <!-- --> 
           <h:inputText class="form-control" id="CAuserName" value="#{accountCreationBean.userName}" pt:placeholder="#{accMsgs.userName}" required="true" requiredMessage="#{accMsgs.userNameRequired}" validator="#{accountCreationBean.validateEmail(context, component, value)}"></h:inputText> 
          </div> 
          <span class="help-block"><h:message id="CAuserNameMessage" class="text text-danger" for="CAuserName" ></h:message></span> 
          <!-- --> 
          <span class="form-control-feedback" id="CAuserNameRightGlyph"></span> 
         </div> 

私のPOJO(データベース接続)

public boolean addMember(String userName, String password, String title, String Phone, String email, String firstName, String lastName, String major) 
    { 
     String addQuery = "INSERT INTO member(First_Name, Last_Name, Phone, Email, Title, UserName, Password, Major) VALUES " + 
       "('" + firstName + "', '" + lastName + "', '" + Phone + "', '" + email + "', '" + title + "', '" + userName + "', '" + password + "', '" + major + "')"; 
     if(!doesExist(userName, email)) 
     { 
      try 
      { 
       PreparedStatement addMember = connection.prepareStatement(addQuery); 
       addMember.executeUpdate(); 
       return true; 

      } 
      catch (SQLException ex) 
      { 
       Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
     else 
      System.out.println("Sorry, but the user " + userName + " and or the emial " + email + " is already regestered with us"); 
     return false; 

    } 
    public boolean doesExist(String userName, String email) 
    { 
     userNameExsits = ""; 
     emailExists = ""; 
     try 
     { 
      String query = "SELECT UserName, Email FROM Member"; 
      statement = (Statement) connection.createStatement(); 
      resultSet = statement.executeQuery(query); 

      while(resultSet.next()) 
      { 
       if (resultSet.getString("UserName").equals(userName)) 
       { 
        userNameExsits = userName; 
       } 
       if(resultSet.getString("Email").equals(email)) 
       { 
        emailExists = email; 
       } 
        return true; 
      } 
     } 
     catch (SQLException ex) 
     { 
      Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return false; 
    } 

、これは私のビーン(リクエストスコープ)である

public void createAccount() 
    { 
     if(super.addMember(userName, password, title, phone, email, firstName, lastName, major)) 
       clear(); 
    } 
    private void clear() 
    { 
     firstName = ""; 
     lastName = ""; 
     email = ""; 
     phone = ""; 
     title = ""; 
     userName = ""; 
     password = ""; 
     major = ""; 
    }; 

答えて

1

1.Validator: JSFは、バックエンドのBeanとバリデーターの検証メソッドを使用したデータ検証をサポートしています。

2.使用方法: ページ(JSP)では、入力コンポーネントをバックエンドBeanのメソッドに関連付けることができます。例えば、RegisterBeanという名前のBeanがあり、そしてそれはJSPページにvalidateEmail.Soというメソッドを持って、あなたはこのように書くことができます。

《h:inputText id= “emailInput” validator= “#{registrationBean.validateEmail}” value= “#{registrationBean.email}” /》

そして、ユーザは、このメールに入るとvalidateEmail()は電子メールが既に存在するかどうかをチェックします。そうでなければ、Beanの電子メールが更新されます。それ以外の場合は、エラーmsg(MESSAGE)を返します。

これはあなたを助けます。

1
使用している

validator="#{accountCreationBean.validateEmail(context, component, value)}" 

が、下層コードを示すことなく、

と仮定すると、あなたのバリデータは、(我々は概説的な理由のために知ることができない)が正しく設定されているすべてを行う必要がある。このようなものになる可能性の検証エラー・メッセージ、提供されています

<h:inputText 
    class="form-control" 
    id="CAuserName" 
    value="#{accountCreationBean.userName}" 
    pt:placeholder="#{accMsgs.userName}" 
    required="true" 
    requiredMessage="#{accMsgs.userNameRequired}" 
    validator="#{accountCreationBean.validateEmail(context, component, value)}" 

    validatorMessage="An account with that email address already exists or the email address provided is malformated." 
    > 
</h:inputText> 

このように生成されたメッセージは、同じフィールドの「requiredMessage」にアクセスするのと同じ方法で使用できます。

(つまり、コンポーネントフレームワークが正しい方法で使用されていて、すでに処理されています)

関連する問題