尝试访问JavaBean时引发异常

时间:2009-07-10 20:34:03

标签: java exception java-ee javabeans

我是Java EE的新手,遇到了一个问题,我不明白为什么会这样。 这是我的问题:

我无法使用在同一页面的scriptlet中创建的<jsp:getProperty>来访问JavaBean。它抛出以下异常:

Attempted a bean operation on a null object.

这是我的bean和jsp页面:

package com.webProject3.beans;

public class User implements java.io.Serializable {

private static final long serialVersionUID = 1209333714609490385L;
private int id;
private String lastName;
private String firstName;

public User(){

}

public void setId(int id) {
    this.id = id;
}
public int getId() {
    return id;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public String getLastName() {
    return lastName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getFirstName() {
    return firstName;
}

}

<body>  
  <%  
  com.webProject3.beans.User requestedUser = new com.webProject3.beans.User();  
  requestedUser.setFirstName("Peter");  
  requestedUser.setLastName("Petrelli");  
  %>  

 <p><jsp:getProperty name="requestedUser" property="firstName"></jsp:getProperty></p>  
</body>  

2 个答案:

答案 0 :(得分:3)

您的问题是您正在尝试使用超出范围的变量。您需要在实例化的同一范围内使用该变量。

试试这个:

<body>
<jsp:useBean id="user" class="com.webProject3.beans.User"/>
<%
  requestedUser.setFirstName("Peter");  
  requestedUser.setLastName("Petrelli"); 
%>

然后使用EL表示法进行访问,如下所示:

${user.firstName}
${user.lastName}

等...

答案 1 :(得分:3)

为了保持一致性,坚持使用一代JSP技术可能更好。也就是说,不要让理想主义阻碍实用主义。

Scriptlets +表达式(意大利面条代码的配方):

<%
    com.webProject3.beans.User requestedUser = new com.webProject3.beans.User();
    requestedUser.setFirstName("Peter");
%>
<%=requestedUser.getFirstName()%>

标准行动:

<jsp:useBean id="user" class="com.webProject3.beans.User">
    <jsp:setProperty name="user" property="firstName" value="Peter" />
</jsp:useBean>
<jsp:getProperty name="user" property="firstName" />

JSTL(自定义标记),使用标准操作来实例化bean:

<jsp:useBean id="name" class="com.webProject3.beans.User">
    <c:set target="${name}" property="firstName" value="Peter" />
</jsp:useBean>
<c:out value="${name.firstName}" escapeXml="false" />

如果bean在控制器servlet而不是JSP中实例化,则通常也可以从JSTL代码中删除标准操作。

自定义标签的引入为其他框架铺平了道路,因此通常也不使用JSTL。

要了解错误的确切原因,请查看是否可以找到生成的servlet代码(如果有)。在Tomcat中,这最终会出现在一个名为org / apache / jsp / foo_jsp.java的工作目录中