Как Вы получаете 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, так как это будет используемым связанным с "представлением" способом.
Если вам когда-нибудь понадобится вытащить необработанный 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-компонент деталями, относящимися к просмотру.
У вас уже есть ответ :) Боюсь, вам придется использовать его таким образом, поскольку каждый HTTP-запрос должен быть получен из контекста лиц. Вы, конечно, можете упростить некоторую часть этого метода, например, поиск контекста лиц, но это определенно правильный путь, если вы не используете какую-то структуру, которая абстрагирует эти детали и позволяет вам напрямую перейти к объекту HttpRequest.
С уважением.