Получить URL запроса в бине JSF? - PullRequest
19 голосов
/ 21 июля 2010

Как вы получаете URL запроса в бине, поддерживающем страницу JSF?Я просматривал документы FacesContext, и лучший способ найти его мне кажется ужасно длинным:

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

Редактировать: Функциональные требования Здесь требуется полное URL длясторонняя утилита javascript.Использование или архитектура утилиты не подходят для JSF, но все, кроме этого вызова, подходит.Метод, который я нашел, сработает, но было так неправильно копаться в FacesContext.Кроме того, я надеялся, что найдется способ, который можно вызвать с помощью языка выражений JSF, так как он будет использоваться способом, связанным с «представлением».

Ответы [ 2 ]

31 голосов
/ 22 июля 2010

Если вам когда-нибудь понадобится вытащить необработанный API сервлетов из-под колпаков JSF с помощью FacesContext, то есть вероятность, что вы делаете работу не в том месте. Что это, функциональное требование, для которого вы подумали, что это правильное решение? Может быть, вы не используете реальный класс Servlet или Filter вместо управляемого компонента JSF? Или, может быть, вам вообще не нужен URL-адрес запроса, потому что есть лучшие способы «jsfish» для достижения того же самого?

Если вы обновите свой вопрос, включив подробную информацию о функциональных требованиях, мы сможем предложить правильное решение.


Обновление в соответствии с вашими правками: так что, в конце концов, оно вам просто нужно для просмотра? Например. #{bean.requestURL}? Вы также можете просто извлечь его из объекта HttpServletRequest, который уже неявно доступен в EL.

Когда вы находитесь на JSP:

${pageContext.request.requestURL}

Или когда вы в Facelets:

#{request.requestURL}

А теперь, как вам это нужно для JavaScript? Печать как переменная JavaScript? Как и так?

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

Если это так, вы также можете просто взять window.location для этого.

var url = window.location;

Нет необходимости загромождать компонент JSF подробностями вида.

3 голосов
/ 21 июля 2010

У вас уже есть ответ :) Боюсь, вам придется использовать его таким образом, поскольку каждый HTTP-запрос нужно будет извлекать из контекста лиц.Конечно, вы могли бы упростить некоторую часть этого метода, такую ​​как извлечение контекста лица, но это определенно верный путь, если только вы не используете какую-то платформу, которая абстрагирует эти детали и позволяет напрямую получить объект HttpRequest.

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...