webentwicklung-frage-antwort-db.com.de

Abrufen von Anforderungs- und Sitzungsparametern und -attributen von JSF-Seiten

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?

53
Saeed

Sie können eine Anforderungsparameter-ID mit dem folgenden Ausdruck abrufen:

<h:outputText value="#{param['id']}" />
  • param - Eine unveränderliche Zuordnung der Anforderungsparameter für diese Anforderung, die durch den Parameternamen eingegeben wird. Nur der erste Wert für jeden Parameternamen ist enthalten.
  • sessionScope - Eine Zuordnung der Sitzungsattribute für diese Anforderung, die durch den Attributnamen angegeben wird.

Abschnitt 5.3.1.2 der JSF 1.0-Spezifikation definiert die Objekte, die vom Variablen-Resolver aufgelöst werden müssen.

87
McDowell

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.

43
Drew

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 .

32
ustun

Das kann dir gefallen:

#{requestScope["paramName"]} ,#{sessionScope["paramName"]}

Weil requestScope oder sessionScope ein Kartenobjekt ist.

13
Ming

Sie können auch ein Tool wie OcpSofts PrettyFaces verwenden, um dynamische Parameterwerte direkt in JSF-Beans einzufügen.

6
Lincoln

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 }" />
5
Omar

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>
4
user7094

In der Bean können Sie session.getAttribute ("attributeName") verwenden.

0
Wandile Nxumalo