2016-08-01 6 views
1

좋은 하루, 자바 웹 응용 프로그램에서던져 예외() 또는 addGlobalError()

전에, 나는 사용자가 클릭하는 나는 방법에 약간의 논리를 할 것위한 버튼이 변수를 저장합니다. 그리고 나는 사용자가이 버튼을 5 회 이상 클릭하면 (일부 논리를 치고 예외를 던지면) doSomething()이라는 검사를 수행하려고합니다. 따라서 클릭 수를 저장하는 변수를 만듭니다. 다음과 같은 내 코드 :

@Session 
private int count; 

    public Resolution add() throws BaseException { 

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

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

     return view(); 
    } 

그러나, count++throw BaseValidationException() 후 계산하지 않도록 한 것입니다. 그러나 throw BaseValidationException()을 제거하면 add 버튼을 5 번 클릭하면 시스템이 doSomething()으로 실행됩니다.

나는 Except() 또는 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

아니요, 필요하지 않습니다. –