Wann erstellt JSF eine Sitzung und was wird in eine Sitzungsübersicht eingefügt?
Ich verwende Mojarra 2.2.0.
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
Die verwaltete Bean-Aktionsmethode ist-
public void action() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
.getExternalContext().getSession(false);
System.out.println(session.getId()); // not null for stateful views
}
Zumstateless
viewssession.getId()
wirftNPE
Für Ansichten, die nicht zustandslos sind - Beim Auslösen einer GET-Anforderung gibt esJSESSIONID=340041C96D5AA446D761C3602F54A76D
Ich lese esHie Das
Zum Speichern des clientseitigen Status erstellt JSF die Sitzung nicht und speichert den Ansichtsstatus bei Bedarf in einem ausgeblendeten Eingabefeld mit dem Namen javax.faces.ViewState im Formular.
Weiter ist es hier erwähntDa
JSF erstellt die Sitzung in der Tat automatisch, da der JSF-Ansichtsstatus dort gespeichert werden muss. Wenn Sie die Methode zum Speichern des JSF-Status auf Client statt auf Server setzen, wird sie nicht in der Sitzung gespeichert, und daher muss keine Sitzung erstellt werden.
Ich denke, die obige Zeile ist eine Quelle für Ärger für mich.
Wenn Sie die Methode zum Speichern des JSF-Status auf "client" anstatt auf "server" setzen, wird sie nicht in der Sitzung // FULLY AGREED @ gespeicher
un
hence Es muss keine Sitzung erstellt werden. // Dies ist verwirrend, da für den clientseitigen Speichermechanismus eine Sitzungs-ID vom Servlet-Container generiert wird und daher der Anforderung eine Sitzung zugeordnet ist.
In Bezug auf die Diskussion, die ich mit BalusC in diesem @ hatFrag, Ich habe einen HttpSessionListener- @ erstel
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) {
Thread.dumpStack();
}
public void sessionDestroyed(HttpSessionEvent event) {
}
}
Siehe unten angehängte Screenshots (diese beiden Screenshots beziehen sich auf Version 2.0.3, es muss einen alten Fehler gegeben haben, aufgrund dessen die Sitzung erstellt wurde) -