Подтвердить что ты не робот

Получить URL-адрес запроса в JSF bean?

Как вы получаете URL-адрес запроса в bean, поддерживающий страницу 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, поскольку это будет использоваться в отношении "взгляда".

4b9b3361

Ответ 1

Если вам когда-либо понадобится вытащить необработанный API сервлета из под капотом JSF с помощью FacesContext, то, скорее всего, вы делаете работу не в том месте. Что это, функциональное требование, для которого вы считали, что это правильное решение? Может быть, вы не используете реальный класс Servlet или Filter вместо управляемого JSF bean? Или, может быть, вам не нужен 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 bean с учетом конкретных деталей.

Ответ 2

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

С уважением.