web-dev-qa-db-fra.com

Obtenez l'URL de la demande dans une fève JSF?

Comment obtenez-vous l'URL de la demande dans un haricot de recul avec une page JSF? J'ai parcouru les documents Facscontext et la meilleure façon de trouver semble terriblement long:

public String getRequestURL()
{
    Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
    if(request instanceof HttpServletRequest)
    {
            return ((HttpServletRequest) request).getRequestURL().toString();
    }else
    {
        return "";
    }
}

EDIT: Exigences fonctionnelles L'exigence ici est que nous avons besoin de l'URL complète pour un tiers utilitaire JavaScript. L'utilisation ou l'architecture de l'utilitaire ne convient pas à la JSF, mais tout court de cet appel fait. La méthode que j'ai trouvée fonctionnera, mais il se sentait faux de creuser si profondément dans le faccepontext. De plus, j'espérais qu'il y aurait un moyen qui pourrait être appelé avec la langue d'expression JSF puisque cela va être utilisé de manière "voir".

19
Adam

Si vous avez besoin de transporter l'API de servlet brut sous les hottes JSF par le FacesContext, alors que vous faites des chances que vous faites le travail au mauvais endroit. Qu'est-ce que c'est, l'exigence fonctionnelle pour laquelle vous pensiez que c'est la bonne solution? Si vous ne pouvez pas utiliser de véritable Servlet classe ou a Filter au lieu d'un haricot géré JSF? Ou peut-être n'avez-vous pas besoin de l'URL de la demande car il existe de meilleures façons "JSfish" d'atteindre la même chose?

Si vous mettez à jour votre question pour inclure les détails sur l'exigence fonctionnelle, nous pourrons peut-être suggérer la bonne solution.


Mise à jour Selon votre édition: Donc, vous en avez simplement besoin de tout cela de la vue? Par exemple. #{bean.requestURL}? Vous pouvez également simplement saisir de l'objet HttpServletRequest qui est déjà implicitement disponible en el.

Lorsque vous êtes sur JSP:

${pageContext.request.requestURL}

Ou quand vous êtes en facelets:

#{request.requestURL}

Et maintenant, comment en avez-vous besoin pour JavaScript? Impression comme variable JavaScript? Ainsi?

var url = '#{request.requestURL}';

Si oui, vous pourriez aussi simplement saisir window.location Pour cela.

var url = window.location;

Pas besoin d'encombrer la bean JSF avec les détails spécifiques de la vue.

31
BalusC

Vous avez déjà votre réponse :) J'ai bien peur que vous ne deviez l'utiliser de cette façon, car chaque demande HTTP devra être récupérée du contexte des faces. Bien sûr, vous pouvez simplifier une partie de cette méthode, comme la récupération de contexte des visages, mais c'est définitivement la voie à suivre, à moins que vous n'utilisiez une sorte de cadre qui résoudra ces détails et vous permettant d'accéder directement à l'objet HTTPRequest.

Salutations.

3
Jose Diaz