2016-08-01 27 views
1

Guten Tag,speichern Variable vor throw Ausnahme() oder addGlobalError()

in einer Java-Web-Anwendung, ich habe eine Schaltfläche für Benutzer klicken, und ich werde in dem Verfahren eine gewisse Logik tun. Und ich plane, eine Prüfung zu machen, die doSomething() ist, wenn Benutzer mehr als 5 Mal auf diesen Knopf klickt und (irgendeine Logik trifft und Ausnahme wirft). Daher erstelle ich eine Variable, um die Anzahl der Klicks zu speichern. Mein Code wie folgt:

@Session 
private int count; 

    public Resolution add() throws BaseException { 

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

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

     return view(); 
    } 

Allerdings wird die count++ nicht +1 nach throw BaseValidationException() zu zählen. Aber wenn ich die throw BaseValidationException() entferne, dann wird das System zu doSomething() laufen, nachdem ich 5 mal auf die add Taste klicke.

Ich glaube, dass throw Exception() oder addGlobalError() wird nicht den Variablenwert in Sitzung gespeichert. Irgendwelche Ideen, um dieses anders zu überwinden, als den Wert zu db zu speichern?

+0

Warum Sie der Sitzung oder den Cookies keinen Zählerwert hinzufügen, session.setCounter ("counter", counter); –

+0

In Servlet (In Java Web App) ist es nicht empfehlenswert, eine Instanzvariable im Servlet zu erstellen, speziell um die Benutzerdaten zu speichern. –

+0

Die Zählung berücksichtigt Benutzerdaten nicht richtig? Benutzer kann nicht über die Benutzeroberfläche bearbeiten, der Benutzer weiß nicht, dass diese Variable auch existiert. –

Antwort

1

Dies wird funktionieren.

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

Können Sie "private int count" entfernen? oder ist das erforderlich? – immibis

+0

Nein, es ist nicht erforderlich. –