2016-08-01 72 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

不,这不是必需的。 –