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

Как Вы получаете 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, так как это будет используемым связанным с "представлением" способом.

19
задан Adam 23 July 2010 в 00:09
поделиться

2 ответа

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

31
ответ дан 30 November 2019 в 03:48
поделиться

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

С уважением.

3
ответ дан 30 November 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: