2016-08-01 24 views
1

良い一日、Java Webアプリケーションでスロー例外()またはaddGlobalError()

前に、私は、ユーザーがクリックすると、私はこの方法では、いくつかのロジックを行いますためのボタンを持つ変数を保存します。そして、ユーザーがこのボタンで5回以上クリックして(何らかのロジックを押して例外をスローする)、doSomething()というチェックを行う予定です。したがって、クリック数を格納する変数を作成します。次のように私のコード:

@Session 
private int count; 

    public Resolution add() throws BaseException { 

     if (count >= 5) { 
     doSomething(); 
     } 

     if (true) { 
     count++; 
     throw BaseValidationException(); 
     } 

     return view(); 
    } 

しかし、count++はなりません+1 throw BaseValidationException()後にカウントします。 throw BaseValidationException()を削除した場合、addボタンを5回クリックすると、システムはdoSomething()になります。

例外をスローすると、addGlobalError()は変数値をセッションに格納しないと考えています。 dbに値を格納する以外にこれを克服するアイデアはありますか?

+0

セッションまたはクッキーにカウンタ値を追加しない理由、session.setCounter( "counter"、counter); –

+0

サーブレット(Java Web Appでは)では、サーブレットにインスタンス変数を作成することはお勧めできません。特に、ユーザーデータを保存することはお勧めしません。 –

+0

数はユーザーデータの権利を考慮していませんか?ユーザーはそれをUIで編集することはできませんが、ユーザーはこの変数が存在するかどうかもわかりません。 –

答えて

1

これは動作します。

private int count; 

    public Resolution add() throws BaseException { 
     HttpSession session=request.getSession(); 
     int count=(Integer)session.getAttribute("count"); 
     if (count >= 5) { 
     doSomething(); 
     } 

     if (true) { 
     count++; 

     session.setAttribute("count",count); 
     throw BaseValidationException(); 
     } 

     return view(); 
    } 
+0

"private int count;"を削除できますか?それとも必要なのですか? – immibis

+0

必須ではありません。 –

関連する問題