Comment puis-je obtenir de l'url de la requête en jsf managed bean sans la demande de servlet?
En supposant que l'URL est http://localhost:8080/project-name/resource.xhtml,
Je veux obtenir de la http://localhost:8080/project-name
dans un managed bean JSF.
Vous devez vous connecter pour publier un commentaire.
Je vais supposer que vous êtes en utilisant JSF 2 et Java EE 6 pour cette réponse.
La mise en œuvre du mécanisme réel varie en fonction de la mesure à laquelle vous aurez besoin de l'URL d'origine.
Vous aurez d'abord besoin d'obtenir l'accès au conteneur de servlet (supposé, au lieu d'une rubrique conteneur) produit objet HttpServletRequest. Utiliser le
FacesContext
objet pour accéder à l'objet HttpServletRequest de la manière suivante:La
HttpServletRequest
classe fournit plusieurs méthodes utiles pour obtenir un près de représentation de la demande d'origine:getRequestURL()
, qui prévoit que la demande d'origine sans la chaîne de requêtegetScheme
,getServerName
,getServerPort
,getContextPath
,getServletPath
,getPathInfo
etgetQueryString
dont toutes les sorties peuvent être combinés à la séquence d'obtenir la demande d'origine. Vous pourriez avoir à omettre ce dernier invocations si vous voulez une moindre fragment de l'URL.Vous pouvez l'obtenir comme suit:
Remarque qu'il y a probablement de meilleures façons d'atteindre l'exigence. L'obtention de la crue de la Servlet API à l'intérieur d'un managed bean JSF est une odeur de code d'alarme.
import javax.servlet.*
comme avecHttpServletRequest
dans ce cas particulier. Vous n'avez pas.Vous pouvez éviter conteneur des dépendances spécifiques à l'aide de la
ExternalContext
dans quelque chose comme cette forme:Toutefois, notez que ce code ne peut pas être entièrement conteneur-agnostique - certaines de ces méthodes de jeter un
UnsupportedOperationException
dans leur mise en œuvre par défaut. Ce code s'appuie sur JSF 2.0 méthodes.Vous devriez noter également que l'utilisation d'un URI comme ce n'est pas la bonne manière de se référer à une ressource dans votre application dans le cas général; le
ViewHandler
etExternalContext
devrait être utilisé de concert pour créer des Url de ressource pour faire référence à des ressources de l'application pour récupérer des ressources ou de l'action de l'Url pour l'invocation de la JSF le cycle de vie, par exemple.Malheureusement, je ne pense pas qu'il y est un général, un conteneur de façon agnostique à faire tout ce que vous voulez faire dans une application JSF, donc parfois vous êtes dépendante de la mise en œuvre et vous avez peu de choix, mais de faire tomber d'autres Api.
Le meilleur moyen est de l'accès à la ExternalContext RequestHeaderMap attributs.
Vous pourriez économiser de l'urlRefered attribut dans vos haricots et de processus dans votre page xhtml comme suit:
N'oubliez pas de cartographie de votre page d'erreur dans votre web.xml fichier trop.
Par l'autre côté vous avez également pu l'obtenir à partir de cette ligne directement à la page xhtml: