0

我的超类用户存在一些问题,其中包含学生、教师和公司的用户名和密码。

一切正常,但是当我使用某个用户名/密码组合登录时,数据会丢失。我仍然有来自学生/教师/公司的数据,但不再是用户数据。

User.java(荷兰语中的 gebruiker,这是超类):

public class Gebruiker {
private String gebruikersnaam, wachtwoord;

public Gebruiker(String gn, String ww) {
    gebruikersnaam = gn; //username
    wachtwoord = ww; //password
}

public Gebruiker() { 
    //Default constructor
}

    //Getters and setters...
}
}

Student.java(荷兰语中的leerling):

public class Leerling extends Gebruiker implements Serializable {
private static final long serialVersionUID = -3586223028920551117L;
private String naam, email, leerlingnr;

public Leerling(String gn, String ww, String nm, String em, String ln) {
    super(gn, ww);
    naam = nm;
    email = em;
    leerlingnr = ln;
}

    //Getters and setters...
}

到目前为止,代码工作正常。我可以使用这样的用户名和密码创建一个学生:

Gebruiker g1 = (Gebruiker) new Leerling("username", "password", "name", "email", "nr");

当我登录到我的应用程序并与我的用户设置会话时,问题就出现了:

req.getSession().setAttribute("gebruikerObject", g1);

我刷新页面的那一刻。用户对象中的用户名和密码为空,'name' 'email' 和 'nr' 保持正常。当我在 JSP 页面上打印 gebruikerObject 时,每次刷新都会得到不同的返回值:

com.appspot.AccentNijkerk.model.Leerling@16ee9e2
com.appspot.AccentNijkerk.model.Leerling@1c6b2e3
com.appspot.AccentNijkerk.model.Leerling@1fa486

我真的希望你们能帮助我,提前谢谢。

PS:我使用 Google App Engine,会话已启用

4

1 回答 1

1

该类Gebruiker也应该是可序列化的。

此外,您应该了解this关键字,并使用它来获得良好、可读、可理解的变量名称,同时尊重 Java 命名约定:

public Gebruiker(String gebruikersNaam, String wachtWoord) {
    this.gebruikersNaam = gebruikersNaam;
    this.wachtWoord = wachtWoord;
}
于 2013-10-23T12:57:22.313 回答