2010-07-15 4 views
54

В JSF основы боба (Managed Bean, Weld Bean, не имеет значения), я могу получить путь контекста клиент находится на по телефонуПолучить текущую страницу программно

FacesContext ctx = FacesContext.getCurrentInstance(); 
String path = ctx.getExternalContext().getRequestContextPath(); 

Это дает мне путь к клиент в настоящее время обращается, например, /myapplication. Возможно ли получить текущий страница, как /home.faces, и как?

ответ

102

Вы обычно хотите использовать UIViewRoot#getViewId() для этого.

String viewId = facesContext.getViewRoot().getViewId(); 

Это в EL также доступно в следующем:

#{view.viewId} 

Именно это значение многоразовый в навигационном случае таких показателей, как <h:link outcome> и <h:button outcome>.


В качестве альтернативы, вы можете также использовать HttpServletRequest#getRequestURI(), чтобы получить то, что конечный пользователь фактически видит в адресной строке браузера.

String uri = ((HttpServletRequest) externalContext.getRequest()).getRequestURI(); 

Что в EL также доступны в следующем:

#{request.requestURI} 

Именно это значение многоразовых в <h:outputLink value> или простой <a href>. Обратите внимание, что вы не можете использовать его в качестве результата для навигации.

+1

Это не надежно работать. Например, с PrettyFaces это не дает URL-адрес, который был вызван для создания текущей страницы. – DoubleMalt

+1

@DoubleMalt: OP не указывает, что он использует PrettyFaces. – BalusC

+4

Хотя это правда, он также явно не указал, что он этого не сделал. Моя точка зрения заключалась в том, что библиотеки, расширяющие JSF, могут нарушить ваше решение (а PrettyFaces - довольно распространенное усовершенствование, поскольку обработка стандартной навигации в навигации довольно неуклюжая). Я просто хотел дать людям, которые узнают, что ваше чистое решение не помогает им понять, почему. – DoubleMalt

12

Хорошо, понял, что это

FacesContext ctx = FacesContext.getCurrentInstance(); 
HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest(); 
// returns something like "/myapplication/home.faces" 
String fullURI = servletRequest.getRequestURI(); 
2
String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI(); 
1
String str = ((HttpServletRequest) FacesContext.getCurrentInstance() 
.getExternalContext().getRequest()).getRequestURI(); 
System.out.println(str); 
+2

Пожалуйста, объясните свой ответ и в словах. –

+0

Это ничего не добавляет к предыдущим ответам. – Robert

Смежные вопросы