2009-07-10 66 views
1

我是Java EE上的新手,遇到了一個問題,我不明白爲什麼會發生這種情況。 這裏是我的問題:嘗試訪問JavaBean時引發的異常

我無法訪問使用其在小腳本創建在同一page.It的拋出異常下面一個<jsp:getProperty>的JavaBean:

Attempted a bean operation on a null object.

這是我和豆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> 

回答

3

你的問題是你試圖使用一個超出範圍的變量。您需要在實例化的範圍內使用該變量。

試試這個:

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

然後您可以訪問使用EL符號如下:

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

等等

+0

是的,當我探索生成的servlet代碼(displayUserInfo_jsp.java)時,McDowell說我看到當我嘗試訪問它在頁面範圍內搜索它的bean,但在scriptlet中創建的實例不在這個範圍內,所以我得到了一個空對象相關的異常,就像在我的第一篇文章中。 – tuxmaul 2009-07-11 12:58:07

3

出於一致性的考慮,它可能更好地堅持到一代JSP技術。也就是說,不要讓理想主義妨礙實用主義。

小腳本+表達式(配方爲麪條代碼):

<% 
    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中實例化,則標準操作c通常也會從JSTL代碼中刪除。

自定義標籤的引入爲其他框架鋪平了道路,因此通常不使用JSTL。

要了解錯誤的確切原因,請查看您是否可以找到生成的servlet代碼(如果有)。在Tomcat中,這最終會出現在名稱類似org/apache/jsp/foo_jsp.java的工作目錄中。

相關問題