2016-08-26 13 views
0

ログイン後にユーザーのフルネームを表示しようとしていますが、方向を必要としています。私はすでにデータベースに対してユーザーを検証していますが、ログインからメールを返します。ログインしているユーザーに関する情報LoginDAO、Session、およびmanagedbeanの3つのクラスがあり、loginDAOにはデータベースから必要な情報を取得するためのクエリが含まれています。javaでログインした後にフルネームを返します

public class Users { 
    private int userid; 
    private String fname; 
    private String lname; 
    private String email; 
    private String password; 
    private String profileimg; 
    Profile uprofile = new Profile(); 

public Profile getUprofile() { 
    return uprofile; 
} 

public void setUprofile(Profile uprofile) { 
    this.uprofile = uprofile; 
} 

public String getProfileimg() { 
    return profileimg; 
} 

public void setProfileimg(String profileimg) { 
    this.profileimg = profileimg; 
} 

public int getUserid() { 
    return userid; 
} 

public void setUserid(int userid) { 
    this.userid = userid; 
} 

public String getFname() { 
    return fname; 
} 

public void setFname(String fname) { 
    this.fname = fname; 
} 

public String getLname() { 
    return lname; 
} 

public void setLname(String lname) { 
    this.lname = lname; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

}

public class LoginDAO {   
    public static Users validate (String user,String password) throws SQLException{ 
     Connection con = null; 
    PreparedStatement ps = null; 
    Users validUser = null; 

     try{ 
      con = DataConnect.getConnection(); 
      ps = con.prepareStatement("Select fname,lname,email, password from users where email = ? and password = MD5(?)"); 
      ps.setString(1, user); 
      ps.setString(2, password); 

      ResultSet rs = ps.executeQuery(); 

      if(rs.next()) { 
      validUser = new Users();    
       validUser.setFname(rs.getString("fname")); 
       validUser.setLname(rs.getString("lname")); 
       return true; 
      return validUser; 
        } 
    }catch (SQLException ex){ 
    System.out.println("Login error -->" + 
      ex.getMessage()); 
    return null; 
}finally{ 
    DataConnect.close(con); 
} 
return validUser; 

} }

これは @ManagedBean(名= "loginbean") は パブリッククラスLoginBeanがシリアライズ{ プライベート文字列を実装@SessionScoped管理対象Beanでありますfname; プライベート文字列pwd; プライベートString msg; プライベートStringユーザー。

public String getFname() { 
     return fname; 
    } 

    public void setFname(String fname) { 
     this.fname = fname; 
    } 

    public String getPwd() { 
     return pwd; 
    } 

    public void setPwd(String pwd) { 
     this.pwd = pwd; 
    } 

    public String getMsg() { 
     return msg; 
    } 

    public void setMsg(String msg) { 
     this.msg = msg; 
    } 

    public String getUser() { 
     return user; 
    } 

    public void setUser(String user) { 
     this.user = user; 
    } 

このメソッドはloginDAOを呼び出し、ユーザー入力と照合してセッションを開始します。

public String validateUsernamePassword() throws SQLException { 
Users validUser = LoginDAO.validate(user, pwd); 
    if (validUser != null) { 
     HttpSession session = SessionUtils.getSession(); 
     session.setAttribute("username", validUser.getEmail()); 
    session.setAttribute("firstname", validUser.getFname()); 
     return "feed"; 
    } else { 

     return "login"; 
    } 
} 
//logout event, invalidate session 
public String logout() { 
    HttpSession session = SessionUtils.getSession(); 
    session.invalidate(); 
    return "login"; 
} 

    <h:form> 
      <p>Welcome <h:outputText id="username" value="#  
     {loginbean.user}"/></p> 
      <h:outputText id="firstname" value="#{loginbean.fname}"/> 
    <h:commandLink action="#{loginbean.logout}" value="Logout"> 
    </h:commandLink> 


</h:form> 
+1

あなたのコードの書式設定を修正してください。 –

+0

とあなたのプログラムの問題点は何ですか? – whyn0t

答えて

1

あなたMethodeのはLoginDAO.validate(user, pwd);(trueまたはfalse)ブール値ではなく、ユーザー・オブジェクトを返します。

、ここで:

if(rs.next()){ 

    rs.getString("fname"); 
    rs.getString("lname"); 
    return true; 
} 

あなたは結果セットから属性"fnameに""LNAME" を得るが、あなたはどこでもそれらを保存しないでください!

あなたは、このメソッドをこのように変更することがあります。

public static UserObject validate (String user,String password) throws SQLException{ 
    Connection con = null; 
    PreparedStatement ps = null; 
    UserObject validUser = null; 
    try{ 
     con = DataConnect.getConnection(); 
     ps = con.prepareStatement("Select fname,lname,email, password from users where email = ? and password = MD5(?)"); 
     ps.setString(1, user); 
     ps.setString(2, password); 

     ResultSet rs = ps.executeQuery(); 

        if(rs.next()){ 
        validUser = new UserObject(); 
        validUser.setFname(rs.getString("fname")); 
        validUser.setLname(rs.getString("lname")); 
        validUser.setEmail(rs.getString("email")); 
        // ...etc. 
         return validUser; 
        } 
    }catch (SQLException ex){ 
     System.out.println("Login error -->" + 
       ex.getMessage()); 
     return null; 
    }finally{ 
     DataConnect.close(con); 
    } 
    return validUser; 
} 

、あなたはその有効ログインする場合は、この方法をご確認ください:

public String validateUsernamePassword() throws SQLException { 
    UserObject validUser = LoginDAO.validate(user, pwd); 
    if (validUser != null) { 
     HttpSession session = SessionUtils.getSession();   
     session.setAttribute("username", validUser.getUsername()); 
     session.setAttribute("firstname",validUser.getFname()); 
     return "feed"; 
    } else { 
     return "login"; 
    } 
} 
+0

こんにちはラミーは助けてくれてありがとう、それは大丈夫ログインがうまくいくとは思うけどユーザー名は表示されません – user2491007

+0

もう一度私の答えをお読みください! validateメソッドはtrueまたはfalseのみを返し、フェッチされたデータは任意のオブジェクト/変数に保存しません。validateUsernamePasswordでは、 "fname"値はどこにありますか?私の例に従って、ニーズ/実装に合わせて書き直してみてください。それはうまくいくはずです。またはあなたの質問を更新し、あなたのBeans/Objects ...の完全なコードを提供するなど。 –

関連する問題