我正在尝试使用JSF,EJB和JPA实现登录方法。我目前的方法是将jsf页面中的登录名和密码传递给托管bean,然后在用户按下按钮时触发bean中的方法login()。
然后方法login在EJB bean中调用authenticate方法,这就是我的问题。我有两种类型的用户(两个实体,Student和Teacher),那么在找到用户的情况下,EJBs方法的返回值应该是什么?
我正在考虑返回实体的id,然后在托管bean中使用该id检索我的实体。或者以某种方式使用多态,但我的实体已经扩展了AbstractEntity类(它只包含id和setter / getters),我没有看到它如何帮助我解决我的问题。目标是在原始托管bean中成功登录后拥有我的用户实体。
非常感谢你的回答,这可能是个愚蠢的问题,但我真的没有想法: - )
答案 0 :(得分:1)
你基本上有两种选择:
让Student
和Teacher
扩展一个共同的抽象类,如Person
或User
。如果(几乎)只有常用的方法,那当然只有最好的。
创建另一个类Person
或User
,它可以将Student
或Teacher
作为构造函数参数,并让所有方法委托给包装的实例。然后,您应该根据视图需要对此类进行建模。你当然不能也不想在EL表达式中做instanceof
。
这可以通过创建3个类进一步抽象:一个视图需要的基本抽象包装类和两个具体实现,一个应该包装Student
,另一个应该包装Teacher
。当您想再次添加其他类型的用户时,这样可以更轻松地进行扩展。