Obtenez les paramètres et les attributs des requêtes et des sessions à partir des pages JSF

j'utilise JSF avec facelets et j'ai besoin de mettre les paramètres request et session dans la page JSF. Dans les pages JSP j'ai eu ce paramètre comme ça: "${requestScope.paramName}" ou "${sessionScope.paramName}" . Mais maintenant, après avoir utilisé JSF, il n'y a que des haricots et vous ne pouvez pas obtenir de valeur à part les attributs des haricots.

NOTE: les attributs de la session ce dont j'ai besoin est rempli automatiquement en utilisant la sécurité acegi de sorte que je ne peux pas obtenir n'importe quel accès à eux.

Alors, que faire maintenant?

51
demandé sur ROMANIA_engineer 2009-02-15 10:07:39

7 réponses

vous pouvez obtenir un paramètre de requête id en utilisant l'expression:

<h:outputText value="#{param['id']}" />
  • param - une carte immuable des paramètres de la requête pour cette requête, saisie par nom du paramètre. Seule la première valeur pour chaque nom de paramètre est inclus.
  • sessionScope - une carte des attributs de session pour cette demande, saisie par le nom de l'attribut.

la section 5.3.1.2 de la spécification JSF 1.0 définit les objets qui doivent être résolus par le résolveur de variables.

83
répondu McDowell 2009-02-15 11:07:52

vous pouvez également utiliser un bean (request scoped est suggéré) et accéder directement au contexte par le biais du texte Facescon.

vous pouvez obtenir les objets HttpServletRequest et HttpServletResposne en utilisant le code suivant:

HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();

après cela, vous pouvez accéder à des paramètres individuels via getParameter(paramName) ou accéder à la carte complète via getParameterMap() req objet

la raison pour laquelle je suggère une demande scoped bean est que vous pouvez les utiliser lors de l'initialisation (pire des cas étant le constructeur. La plupart des frameworks vous donnent un endroit pour faire du code au moment de l'initialisation de bean) et ils seront faits au fur et à mesure que votre requête arrivera.

Il est, toutefois, un peu un hack. ;) Vous voudrez peut-être vérifier s'il y a un module ACEGI JSF qui vous permettra d'accéder aux variables dont vous avez besoin.

37
répondu Drew 2018-06-04 19:25:42

vous pouvez utiliser

<h:outputText value="#{param['id']}" /> ou

<h:outputText value="#{request.getParameter('id')}" />

cependant si vous voulez passer les paramètres à vos haricots de soutien, en utilisant f:viewParam est probablement ce que vous voulez. "Un paramètre de vue est une correspondance entre un paramètre de chaîne de requête et une valeur de modèle."

<f:viewParam name="id" value="#{blog.entryId}"/>

cela définira le paramètre id param du paramètre GET à entryId " champ. Voir http://java.dzone.com/articles/bookmarkability-jsf-2 pour les détails.

31
répondu ustun 2011-11-15 09:28:41

vous pouvez comme ceci:

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

parce que requestScope ou sessionScope est un objet cartographique.

13
répondu Ming 2012-11-12 08:54:01

vous pouvez également utiliser un outil comme D'OcpSoft" PrettyFaces pour injecter des valeurs de paramètres dynamiques directement dans les haricots JSF.

6
répondu Lincoln 2016-02-08 20:21:56

en supposant que vous avez déjà mis votre objet comme attribut sur la carte de session de l'instance actuelle du FacesContext à partir de votre "managed-bean", vous pouvez l'obtenir à partir de la page JSF par:

<h:outputText value="#{sessionScope['yourObject'] }" />

si votre objet a une propriété, obtenez-la de:

<h:ouputText value="#{sessionScope['yourObject'].anyProperty }" />
5
répondu Omar 2013-07-17 12:03:06

êtes-vous sûr de ne pas pouvoir accéder aux variables request / session scope à partir d'une page JSF?

C'est ce que je fais dans notre page de connexion, en utilisant la sécurité du printemps:

<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
répondu 2009-02-18 09:32:03