Получить текущую страницу программно
В поддержке JSF bean (управляемый Bean, Weld Bean, не имеет значения), я могу получить контекстный путь, на который клиент работает, вызывая
FacesContext ctx = FacesContext.getCurrentInstance();
String path = ctx.getExternalContext().getRequestContextPath();
Это дает мне путь, к которому клиент обращается, например /myapplication
.
Можно ли также получить текущую страницу, например /home.faces
, и как?
Ответы
Ответ 1
Обычно вы хотите использовать 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>
. Обратите внимание, что вы не можете использовать его в качестве результата для навигации.
Ответ 2
Хорошо, получилось, это
FacesContext ctx = FacesContext.getCurrentInstance();
HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest();
// returns something like "/myapplication/home.faces"
String fullURI = servletRequest.getRequestURI();
Ответ 3
String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI();
Ответ 4
String str = ((HttpServletRequest) FacesContext.getCurrentInstance()
.getExternalContext().getRequest()).getRequestURI();
System.out.println(str);