2016-04-29 17 views
0

私はプロファイル編集フォームにこのJava Server Facesバリデーターを使用します。しかし、私はこの問題に遭遇しました。たとえば、ID 45のアカウントを持っています。フォームを送信すると、このIDがすでに存在するというエラーが表示されます。私は成功したアカウントを編集するために自分のIDを許可するように、[送信]をクリックしたときにデータベースから番号を確認してください

public void validateAccountID(FacesContext context, UIComponent component, Object value) throws SQLException 
    { 
     Long l; 
     String s = value.toString().trim(); 

     if (s.length() > 18) 
     { 
      throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, 
       " Value is too long! (18 digits max)", null)); 
     } 

     try 
     { 
      l = Long.parseLong(s); 
      if (l > Integer.MAX_VALUE) 
      { 
       throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, 
        " '" + l + "' is too large!", null)); 
      } 
     } 
     catch (NumberFormatException nfe) 
     { 
      l = null; 
     } 

     if (l != null) 
     { 
      if (ds == null) 
      { 
       throw new SQLException("Can't get data source"); 
      } 

      Connection conn = null; 
      PreparedStatement ps = null; 
      ResultSet rs; 
      int cnt = 0; 
      try 
      { 
       conn = ds.getConnection(); 
       ps = conn.prepareStatement("SELECT count(1) from ACCOUNT where ID = ?"); 
       ps.setLong(1, l); 
       rs = ps.executeQuery(); 

       while (rs.next()) 
       { 
        cnt = rs.getInt(1); 
       } 

       if (cnt > 0) 
       { 
        throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, 
         " '" + l + "' is already in use!", null)); 
       } 
      } 
      catch (SQLException x) 
      { 
       throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, 
        " SQL error!", null)); 
      } 
      finally 
      { 
       if (ps != null) 
       { 
        ps.close(); 
       } 
       if (conn != null) 
       { 
        conn.close(); 
       } 
      } 
     } 
     else 
     { 
      throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, 
       s.isEmpty() ? " This field cannot be empty!" : " '" + s + "' is not a number!", null)); 
     } 
    } 

は、だから、私はアカウント45のアカウントのプロフィールページを開いたときに、いくつかのロジックを実装する必要があります。あなたは何かを提案できますか?

+0

はそうあなたが重複アカウントの作成を許可する必要があるフォームの残りのフィールドをユーザーがまだログインしているかどうかを確認し、検証 - : - submition編集フォームで真 2にUserBeanのログインブールフラグを設定しますか? – raven

+0

@Peter Penzov ps.executeUpdate();を実行します。 (cnt> 0) – Unknown

答えて

-1

あなたの編集フォームでは、このIDがデータベースに存在することがわかったら例外をスローするべきではありません。これは既存のアカウントから期待されるもので、データベースにレコードを持つことです。あなたの検証は、ユーザがログイン時に編集フォームにアクセスする前のユーザーでなければなりません。 Onesはログに記録されます。ユーザーBeanのフラグをログに記録します。ここでは、自分のプロファイルを変更するためにユーザーがまだログオンしているかどうかを確認します。 1ログイン時 - ユーザーがデータベースに存在し、提供されたパスワードが正しいかどうかを確認します。

関連する問題