Ich habe ein Login-Formular mit JSF und PrimeFaces implementiert. Ich habe this example in der PrimeFaces-Showcase-Website verwendet.Wie kann ich auf Sitzungsattribut in Facelets Seite zugreifen
Ich habe eine Facelets-Seite, um eine DataTable anzuzeigen. Jetzt muss ich das obige Login-Formular mit dieser Tabellenseite integrieren. Also habe ich einige Zeilen in LoginBean.java hinzugefügt, um das Sitzungsattribut zu behandeln.
if (username.equals(getUsername_db()) && password.equals(getPassword_db())) {//valid user and paward
loggedIn = true;
msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", getUsername_db());
//new lines
FacesContext context2 = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context2.getExternalContext().getSession(true);
session.setAttribute("user", username);
//end of new lines
...
Ich brauche eine Spalte aus der Datatable zu verstecken, wenn der Benutzer nicht angemeldet ist. Nun mein Problem ist, wie kann ich Zugriff auf Session Attribut in meiner Facelets Seite?
Danke BalusC. Aber ich habe den Benutzer als Objekt in der Ansicht. so etwas zeigte "User @ 1a8b71e". Wie auch immer, ich habe Teil von deiner Antwort, um mein Problem zu lösen. Ich habe den Sitzungseinstellungsteil entfernt und die LoginBean-Klasse als SessionScoped festgelegt. Und ich konnte Werte direkt innerhalb meines panelGroup-Tags erhalten. Danke nochmal für den SQL-Hinweis. Ich habe es mit vorbereiteten Aussagen geändert. –
Anscheinend ist 'username', wie in Ihrem Code gezeigt, kein' String'. Vielleicht haben Sie den Code in der Frage zu stark vereinfacht? Der SQL-Kommentar sollte übrigens nicht auf vorbereitete Anweisungen hinweisen. Sie vergleichen den Benutzernamen und das Passwort ** zweimal ** (einmal in DB und anschließend in Java). Das macht keinen Sinn. Überprüfen Sie einfach, ob DB einen Datensatz zurückgegeben hat oder nicht, das ist alles. Sie müssen den Benutzernamen/das Passwort nicht noch einmal vergleichen, den Sie bereits von der DB angefordert haben, um zu überprüfen und zurückzugeben. – BalusC
Verstanden! Aber in meiner letzten SQL-Abfrage habe ich nur den Benutzernamen mit der Where-Klausel verwendet. wie: String query = "SELECT Benutzername, Passwort FROM Benutzer WHERE Benutzername = '" + uname + "';"; Also konnte ich nur username.equals (getUsername_db() Teil entfernen. Ich brauche nur in diesem Fall das Passwort zu überprüfen ... danke für Ihren Vorschlag. –