我正在尝试使用MySQL,JDBC,Netbeans创建一个简单的数据库Web应用程序。
我在.jsp页面中有以下代码
<c:if ${sessionScope.Staff.getStatus() == sessionScope.Staff.financial_staff_status} >
Financial staff
</c:if>
其中sessionScope.Staff包含Staff Data类型的对象:
public class StaffData
{
//constants
public final byte default_staff_status = 0;
public final byte financial_staff_status = 1;
public final byte legal_staff_status = 2;
public final byte secretarial_staff_status = 3;
//other data
StaffData()
{
//initializations
}
void authenticate(int staff_num, String passwd) throws ClassNotFoundException, SQLException
{
//connect to sever, blah, blah
}
public String getName()
{
return this.name;
}
public int getNumber()
{
return this.staff_number;
}
public byte getStatus()
{
return this.status;
}
}
我正在提前设置会话对象:
request.getSession().setAttribute("Staff", currentStaff);
我收到以下错误:
javax.el.PropertyNotFoundException: Property 'financial_staff_status' not found on type staff.StaffData
在会话中的人员数据对象中,可以访问诸如getName()之类的公共方法,但是诸如financial_staff_status之类的公共成员不能访问。
为什么我会遇到这个问题?问题似乎与最终变量有关。可以轻松访问非最终变量而不会出现问题。
答案 0 :(得分:1)
EL表达式实际上有三个问题:
<c:if ${sessionScope.Staff.getStatus() == sessionScope.Staff.financial_staff_status} >
test
属性status
应作为Staff.status
访问,因为它已有公共getter方法financial_staff_status
需要在StaffData类中使用公共getter方法。 EL严格遵守对象类的javabeans合规性以及如何访问属性(必须通过公共getter)。此外,除非您在不同范围内具有多个具有相同名称的属性或希望明确说明,否则不一定要限定属性的范围。将从最窄的(pageScope
)到最宽的(applicationScope
)开始搜索不同的范围。
将financial_staff_status
属性的公共getter添加到您的类后,表达式应为:
<c:if test="${sessionScope.Staff.status == sessionScope.Staff.financial_staff_status}">
或简单地说:
<c:if test="${Staff.status == Staff.financial_staff_status}">