JSP-EL会话变量访问错误:javax.EL.PropertyNotFoundException,尽管所述属性是公共的

JSP-EL会话变量访问错误:javax.EL.PropertyNotFoundException,尽管所述属性是公共的,java,mysql,jsp,if-statement,el,Java,Mysql,Jsp,If Statement,El,我正在尝试使用MySQL、JDBC和Netbeans创建一个简单的DB web应用程序 我在.jsp页面中有以下代码 <c:if ${sessionScope.Staff.getStatus() == sessionScope.Staff.financial_staff_status} > Financial staff </c:if> 我正在预先设置会话对象: request.getSession().setAttribute("Staff", curren

我正在尝试使用MySQL、JDBC和Netbeans创建一个简单的DB web应用程序

我在.jsp页面中有以下代码

<c:if ${sessionScope.Staff.getStatus() == sessionScope.Staff.financial_staff_status} >
    Financial staff
</c:if> 
我正在预先设置会话对象:

request.getSession().setAttribute("Staff", currentStaff);
我得到以下错误:

javax.el.PropertyNotFoundException: Property 'financial_staff_status' not found on type staff.StaffData
在会话中的staff数据对象中,可以访问诸如getName()之类的公共方法,但是不能访问诸如financial_staff_status之类的公共成员


为什么我会遇到这个问题?问题似乎在于最终的变量。可以轻松访问非最终变量,而不会出现问题。

EL表达式实际上有三个问题:

<c:if ${sessionScope.Staff.getStatus() == sessionScope.Staff.financial_staff_status} >
或者简单地说:

<c:if test="${Staff.status == Staff.financial_staff_status}">


谢谢。我对测试属性感到困惑。另外,我想使用最后的变量作为常量。有一个getter方法不是有点挫败了这个目的吗?最后,我希望在一个会话中有数据,我可以在注销时删除该数据。这是正确的实现方法吗?嗨@TSG,谢谢你接受这个答案,很高兴它有帮助。为基元常量使用getter不是问题,因为只返回它们的值(声明为final并返回给客户机的对象的内部状态可能仍然会更改)。你也应该考虑让这些常量静态化。将对象存储为会话属性很好;您可以添加一个会话侦听器,以便在会话被破坏时手动清理对象—但我们现在已经偏离主题了!
<c:if test="${sessionScope.Staff.status == sessionScope.Staff.financial_staff_status}">
<c:if test="${Staff.status == Staff.financial_staff_status}">