2016-08-01 69 views
1

好日子,保存變量拋出異常()或addGlobalError()

在Java Web應用程序之前,我有用戶點擊,我會做的方法一些邏輯的按鈕。如果用戶在此按鈕上點擊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(),則系統將運行到doSomething(),因爲我在add按鈕上單擊了5次。

我相信拋出Exception()或addGlobalError()不會將變量值存儲到會話中。任何想法來克服這個比存儲價值數據庫?

+0

爲什麼你沒有將計數器值添加到會話或cookie,session.setCounter(「counter」,counter); –

+0

在servlet中(在Java Web App中)不建議在Servlet中創建實例變量,特別是存儲用戶數據。 –

+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

不,這不是必需的。 –