2009-06-21 54 views
0

我真的不明白爲什麼JSP中的以下代碼運行良好,但是如第一本書所述,它將顯示編譯時錯誤。標準動作

<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在Servlet類和在請求範圍它設置爲屬性 「人」 是代碼:

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

和代碼Person1豆類是:

package foo; 

public abstract class Person1 
{ 


private String s; 

public void setName(String s) 
{ 
    this.s=s; 
    } 
    public String getName() 
    { 
    return s; 
    } 


    } 

爲什麼它工作?爲什麼它沒有顯示任何錯誤?這本書是錯的嗎?

在此先感謝您的任何建議。

回答

0

我查了這本書。在第354頁上,它將Person更改爲一個抽象類,並創建一個Employee子類來說明如何指定useBean的type屬性。 type參數告訴頁面稍後使用什麼類作爲參考。 class屬性告訴頁面什麼對象來安裝。

編輯:在頁356黑色框中指出:「如果沒有類bean使用類型必須已經存在。」本書示例中的範圍是頁面而不是請求。

+0

但在上面的代碼中,JSP的值類型爲「foo.Person」,但在servlet中,引用實際上被聲明爲「foo.Person1 p = new foo.Person();」。 所以這意味着它應該是不正確的,但它不是當我在Tomcat中運行它。 – Greenhorn 2009-06-22 05:40:41