2010-07-15 117 views
54

在JSF支持Bean(Managed 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 2012-03-25 20:10:58

+1

@DoubleMalt:OP并未表明他正在使用PrettyFaces。 – BalusC 2012-03-25 20:12:09

+4

虽然这是事实,但他也没有明确说明他没有。我的观点是,扩展JSF的库可能会破坏你的解决方案(而PrettyFaces是一个非常普遍的增强,因为标准实现的导航处理非常笨拙)。 我只是想让人们发现,你干净的解决方案不适合他们的线索为什么。 – DoubleMalt 2012-04-12 11:58:49

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

请用单词解释你的答案。 – 2013-02-17 12:05:56

+0

这不会为以前的答案添加任何内容。 – Robert 2015-06-10 20:05:47