2009-07-10 5 views
1

私はJava EEの初心者ですが、なぜ起こっているのか分かりません。ここでJavaBeanにアクセスしようとしたときに例外が発生しました

Attempted a bean operation on a null object.

私のBeanがあると私は同じpage.Itのは、以下の例外をスローでスクリプトレットで作成された<jsp:getProperty>を使用してのJavaBeanにアクセスすることはできません

: ここに私の問題であり、 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

はい、McDowellが生成しようとしたときに生成されたサーブレットコード(displayUserInfo_jsp.java)を調べました。ページスコープで検索していたBeanにアクセスしましたが、スクリプトレットで作成されたインスタンスがこのスコープにないため、最初の投稿のようなnullオブジェクト関連の例外が発生しました。 – tuxmaul

3

を、固執する方が良いでしょう1世代の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" /> 

JSPの代わりにコントローラサーブレットでBeanがインスタンス化された場合、標準アクションc多くの場合、JSTLコードからも削除されます。

カスタムタグの導入は他のフレームワークのための道を開いたため、JSTLも使用されていません。

エラーの正確な原因を理解するには、生成されたサーブレットコード(存在する場合)を見つけることができるかどうかを確認してください。 Tomcatでは、これはorg/apache/jsp/foo_jsp.javaのような名前の作業ディレクトリに終わります。

関連する問題