我正使用一个管理好的会话豆处理 Java EE 应用程序中的登录。 在我验证用户后, 用户对象将保存在本会话豆中。 然而, 在我刷新页面后, 会话豆值将不复存在 。
我调试了代码,结果显示会议范围管理的豆类的构建者在页面更新中再次被调用,因此用新用户初始化了用户对象。 我猜这不是正常行为,因为它应该保存在会场上,不是吗?
我正在张贴登录管理豆类的某些部分, 包括参数和登录方法。 基本上来说, 输入的 Email 和 输入的Password 用于登录格式上输入的数据。 如果认证成功, 登录的 Boolean 将变为真实, 用户对象中的登录将存储在选中的用户变量中 。
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class LoginController implements Serializable {
@EJB
private LoginSessionBean loginSessionBean;
@EJB
private LecturerFacade lecturerFacade;
private Lecturer checkedUser;
private String enteredEmail;
private String enteredPassword;
private boolean loggedIn;
/** Creates a new instance of loginController */
public LoginController() {
loggedIn = false;
checkedUser = new Lecturer();
时 时
public String login(){
RequestContext context = RequestContext.getCurrentInstance();
FacesMessage msg = null;
this.setCheckedUser(lecturerFacade.findLecturerByEmail(enteredEmail));
if(loginSessionBean.checkPassword(checkedUser, enteredPassword))
{
loggedIn = true;
msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", checkedUser.getFirstName()+ " " + checkedUser.getLastName());
FacesContext.getCurrentInstance().addMessage(null, msg);
context.addCallbackParam("loggedIn", loggedIn);
时 时
return "Index";
我还在张贴上面管理的豆类所使用的两个EJB。讲师法卡德用输入的电子邮件检索用户对象,而登录SymondBean检查密码。
@Stateless
public class LecturerFacade extends AbstractFacade<Lecturer> {
@PersistenceContext(unitName = "EffectinetWebPU")
private EntityManager em;
Logger logger = Logger.getLogger("MyLog");
FileHandler fh;
protected EntityManager getEntityManager() {
return em;
时 时
public LecturerFacade() {
super(Lecturer.class);
时 时
public Lecturer findLecturerByEmail(String email) {
try {
return (Lecturer) this.getEntityManager().createQuery("SELECT l FROM Lecturer l WHERE l.email = :email").setParameter("email", email).getSingleResult();
时 时 catch (NoResultException e) {
System.err.println("Caught NOResultException: "+ e.getMessage());
return null;
时 时 catch (NonUniqueResultException e) {
System.err.println("Caught NonUniqueResultException: "+ e.getMessage());
return null;
时 时 catch (IllegalStateException e) {
System.err.println("Caught IllegalStateException: "+ e.getMessage());
return null;
时 时
时 时
_
@Stateless
public class LoginSessionBean {
// Add business logic below. (Right-click in editor and choose
// "Insert Code > Add Business Method")
@PersistenceContext(unitName = "EffectinetWebPU")
private EntityManager em;
protected EntityManager getEntityManager() {
return em;
时 时
public void setEntityManager(EntityManager em) {
this.em = em;
时 时
public boolean checkPassword(Lecturer user, final String enteredPassword) {
if (user.getPassword().equals(enteredPassword)) {
return true;
时 时 else {
return false;
时 时
时 时
时 时
如果有人知道出了什么事 请告诉我
我用玻璃鱼3.1作为应用程序服务器,用头巾作为JSF图书馆。此外,我检查并进口了会话Scovered批注,从右包中而不是从 Javax. 企业...