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?
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.
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.
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.
vous pouvez comme ceci:
#{requestScope["paramName"]} ,#{sessionScope["paramName"]}
parce que requestScope
ou sessionScope
est un objet cartographique.
vous pouvez également utiliser un outil comme D'OcpSoft" PrettyFaces pour injecter des valeurs de paramètres dynamiques directement dans les haricots JSF.
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 }" />
ê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>