如何在登录时返回两种不同类型的用户“学生”和“老师”?

时间:2012-02-16 16:58:44

标签: jsf-2 jpa-2.0 ejb-3.1

我正在尝试使用JSF,EJB和JPA实现登录方法。我目前的方法是将jsf页面中的登录名和密码传递给托管bean,然后在用户按下按钮时触发bean中的方法login()。

然后方法login在EJB bean中调用authenticate方法,这就是我的问题。我有两种类型的用户(两个实体,Student和Teacher),那么在找到用户的情况下,EJBs方法的返回值应该是什么?

我正在考虑返回实体的id,然后在托管bean中使用该id检索我的实体。或者以某种方式使用多态,但我的实体已经扩展了AbstractEntity类(它只包含id和setter / getters),我没有看到它如何帮助我解决我的问题。目标是在原始托管bean中成功登录后拥有我的用户实体。

非常感谢你的回答,这可能是个愚蠢的问题,但我真的没有想法: - )

1 个答案:

答案 0 :(得分:1)

你基本上有两种选择:

  1. StudentTeacher扩展一个共同的抽象类,如PersonUser。如果(几乎)只有常用的方法,那当然只有最好的。

  2. 创建另一个类PersonUser,它可以将StudentTeacher作为构造函数参数,并让所有方法委托给包装的实例。然后,您应该根据视图需要对此类进行建模。你当然不能也不想在EL表达式中做instanceof

    这可以通过创建3个类进一步抽象:一个视图需要的基本抽象包装类和两个具体实现,一个应该包装Student,另一个应该包装Teacher。当您想再次添加其他类型的用户时,这样可以更轻松地进行扩展。