Wie kann ich eine session-Attribut in der Facelets-Seite
Implementierte ich ein login-Formular mit JSF und PrimeFaces.
Ich verwendet dieses Beispiel im PrimeFaces showcase-website.
Ich habe eine Facelets-Seite zu zeigen, eine dataTable. Nun muss ich das integrieren der obigen login-Formular mit dieser Tabelle, Seite. So fügte ich ein paar Zeilen in LoginBean.java zu handhaben session-Attribut.
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 müssen, blenden Sie eine Spalte aus der Datentabelle, wenn der Benutzer nicht eingeloggt ist.
Nun mein problem ist, wie kann ich eine session-Attribut in meinem Facelets-Seite?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie gespeichert haben die angemeldeten Benutzers als session-Attribut mit dem Namen "Benutzer".
So ist es in EL wie folgt verfügbar:
Können Sie einfach die
empty
Schlüsselwort in EL zu prüfen, ob es vorhanden oder nicht (z.B. ob es angemeldet ist oder nicht), und Sie können JSF-Komponenterendered
Attribut zu beauftragen, ob die zum generieren der HTML-Ausgabe oder nicht.In Ihrem speziellen Fall zu verstecken, eine Spalte einer Tabelle, es einfach verwenden, wie folgt:
Ein schöner Weg, um ein session-Attribut mit
ExternalContext#getSessionMap()
. Auf diese Weise, Ihren code frei von stinkendenjavax.servlet.*
Einfuhren.Unabhängigen zu dem konkreten problem, warum die folgenden check?
Warum nimmst du nicht einfach eine
SELECT ... FROM user WHERE username=? AND password=?
in SQL? Oder nicht Sie Vertrauen in die DB, es gibt die richtige Zeile?username
wie gezeigt, in die Ihr code ist nichtString
überhaupt. Vielleicht haben Sie zu stark vereinfacht, den code in die Frage? Durch die Art der SQL-Kommentar war nicht dazu gedacht, um anzudeuten, über prepared statements. Sie vergleicht den Benutzernamen und das Passwort doppelt (einmal in der DB und anderen, später in Java). Das macht keinen Sinn. Nur prüfen, ob DB ein Datensatz zurückgegeben oder nicht, das ist alles. Sie brauchen nicht zu vergleichen mit den Benutzernamen/das Kennwort erneut einzugeben, die Sie bereits gebeten, die DB zu überprüfen und zurückgeben.