2009-06-21 30 views
0

JSPの次のコードが正常に動作している理由は分かりませんが、Head first bookに記載されているように、コンパイル時エラーが表示されます。標準の動作

<html><body> 

<jsp:useBean id="person" type="foo.Person" scope="request"> 
<jsp:setProperty name="person" property="name" value="Fred"/> 
</jsp:useBean> 
<jsp:getProperty name="person" property="name"/> 

</body></html> 

Personクラスのコードは次のとおり

package foo; 

public class Person extends foo.Person1 
{ 
private String s; 

public void setEmpID(String s) 
{ 
    this.s=s; 
    } 
    public String getEmpID() 
    { 
    return s; 
    } 


    } 

とサーブレットクラスにfoo.Personをインスタンス化するためのコードと、要求スコープ内の属性「人」として設定され:

Person1 p=new Person(); 
p.setName("Greenhorn"); 
request.setAttribute("person",p); 

およびコードPerson1 beanクラスは、

です。

なぜ機能していますか?なぜそれは何かエラーを表示していないのですか?本は間違っていますか?

ご意見ありがとうございます。

答えて

0

私は本をチェックしました。 354ページでは、Personを抽象クラスに変更し、Employeeのサブクラスを作成して、useBeanのtype属性を指定する方法を示します。 typeパラメータは、後で参照として使用するクラスをページに指示します。 class属性は、どのオブジェクトを配置するかをページに指示します。

編集: [356]ページで、黒いボックスには、「タイプがクラスBeanなしで使用されている場合は、既に存在しています。本の例のスコープはrequestではなくpageです。

+0

しかし、上記のコードでは、JSPは "foo.Person"という値を持つ型属性を持っていますが、サーブレットでは "foo.Person1 p = new foo.Person();"と実際に宣言されています。 これは間違っているはずだが、Tomcatで実行したときではないことを意味する。 – Greenhorn