Ich verwende JSF mit Facelets und muss die Anforderungs- und Sitzungsparameter auf der JSF-Seite abrufen. In JSP-Seiten habe ich diesen Parameter wie folgt erhalten: "${requestScope.paramName}"
oder "${sessionScope.paramName}"
. Aber jetzt, nachdem Sie JSF verwendet haben, gibt es nur Beans und Sie können keinen Wert außer den Bean-Attributen abrufen.
ANMERKUNG: Die Sitzung weist zu, dass das, was ich benötige, mithilfe der Acegi-Sicherheit automatisch ausgefüllt wird, sodass ich keinen Zugriff darauf bekomme.
Also, was jetzt zu tun?
Sie können eine Anforderungsparameter-ID mit dem folgenden Ausdruck abrufen:
<h:outputText value="#{param['id']}" />
Abschnitt 5.3.1.2 der JSF 1.0-Spezifikation definiert die Objekte, die vom Variablen-Resolver aufgelöst werden müssen.
Sie können auch ein Bean verwenden (es wird ein Anforderungsbereich empfohlen) und über den FacesContext direkt auf den Kontext zugreifen.
Mit dem folgenden Code können Sie die Objekte HttpServletRequest und HttpServletResposne abrufen:
HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
Danach können Sie über getParameter(paramName)
auf einzelne Parameter zugreifen oder über das Objekt getParameterMap()
req
auf die vollständige Karte zugreifen
Der Grund, warum ich ein Request-Scoped-Bean vorschlage, ist, dass Sie diese während der Initialisierung verwenden können (das schlimmste Szenario ist der Konstruktor. Die meisten Frameworks bieten Ihnen einen Platz zum Code-Tun zur Bean-Initialisierungszeit) und sie werden ausgeführt, sobald Ihre Anfrage eingeht.
Es ist jedoch ein bisschen ein Hack. ;) Vielleicht möchten Sie überprüfen, ob es ein JSF-Acegi-Modul gibt, mit dem Sie auf die benötigten Variablen zugreifen können.
Sie können entweder verwenden
<h:outputText value="#{param['id']}" />
Oder
<h:outputText value="#{request.getParameter('id')}" />
Wenn Sie die Parameter jedoch an Ihre Backing-Beans übergeben möchten, ist die Verwendung von f:viewParam
Wahrscheinlich das Richtige für Sie. "Ein Ansichtsparameter ist eine Zuordnung zwischen einem Abfragezeichenfolgenparameter und einem Modellwert."
<f:viewParam name="id" value="#{blog.entryId}"/>
Dadurch wird der ID-Parameter des GET-Parameters auf das Feld entryId
der Blog-Bean gesetzt. Einzelheiten finden Sie unter http://Java.dzone.com/articles/bookmarkability-jsf-2 .
Das kann dir gefallen:
#{requestScope["paramName"]} ,#{sessionScope["paramName"]}
Weil requestScope
oder sessionScope
ein Kartenobjekt ist.
Sie können auch ein Tool wie OcpSofts PrettyFaces verwenden, um dynamische Parameterwerte direkt in JSF-Beans einzufügen.
Angenommen, Sie haben Ihr Objekt bereits als Attribut in der Sitzungsübersicht der aktuellen Instanz von FacesContext
von Ihrer Managed-Bean abgelegt. Sie können es von der JSF-Seite abrufen, indem Sie:
<h:outputText value="#{sessionScope['yourObject'] }" />
Wenn Ihr Objekt eine Eigenschaft hat, holen Sie sich diese wie folgt:
<h:ouputText value="#{sessionScope['yourObject'].anyProperty }" />
Sind Sie sicher, dass Sie auf einer JSF-Seite keinen Zugriff auf Anforderungs-/Sitzungsbereichsvariablen erhalten können?
Das mache ich auf unserer Anmeldeseite mit Spring Security:
<h:outputText
rendered="#{param.loginFailed == 1 and SPRING_SECURITY_LAST_EXCEPTION != null}">
<span class="msg-error">#{SPRING_SECURITY_LAST_EXCEPTION.message}</span>
</h:outputText>
In der Bean können Sie session.getAttribute ("attributeName") verwenden.