2009-06-21 5 views
0

Ich verstehe wirklich nicht, warum der folgende Code in JSP läuft gut, aber wie im ersten Buch beschrieben, zeigt es Kompilierzeit Fehler.Standard Aktion

<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> 

Der Code der Person-Klasse ist:

package foo; 

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

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


    } 

und der Code foo.Person in Servlet-Klasse und wenn er als Attribut "Person" in Anforderungsbereich ist zu instanziiert:

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

und der Code von Person1 Bean-Klasse ist:

package foo; 

public abstract class Person1 
{ 


private String s; 

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


    } 

Warum funktioniert es? Warum zeigt es keinen Fehler? Ist das Buch falsch?

Vielen Dank im Voraus für jeden Vorschlag.

Antwort

0

Ich überprüfte das Buch. Auf Seite 354 ändert es die Person in eine abstrakte Klasse und erstellt eine Unterklasse von Employee, um zu veranschaulichen, wie Sie das type-Attribut der useBean angeben können. Der type-Parameter teilt der Seite mit, welche Klasse später als Referenz verwendet werden soll. Das Klassenattribut teilt der Seite mit, welches Objekt instatiziert werden soll.

Bearbeiten: Auf Seite 356 die Blackbox besagt: "Wenn Typ ohne Klasse verwendet wird, muss Bean bereits vorhanden sein." Der Bereich im Buchbeispiel ist Seite statt Anfrage.

+0

Aber in oben genannten Code hat JSP Typ Attribut mit Wert "foo.Person", aber in Servlet wird die Referenz tatsächlich als "foo.Person1 p = new foo.Person();". Also es bedeutet, es sollte falsch sein, aber es ist nicht, wenn ich es in Tomcat laufen. – Greenhorn