获取当前页面编程


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。 25 3月. 122012-03-25 20:10:58

+1

@DoubleMalt:OP并未表明他正在使用PrettyFaces。 25 3月. 122012-03-25 20:12:09

+4

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

  0

@DoubleMalt:我不会做PrettyFaces,但如果它的视图处理程序没有确定给定导航案例结果的正确URL,我会非常惊讶。 02 12月. 122012-12-02 00:56:27

+1

@DoubleMalt,Prettyfaces应该只是一个更美观的网址。您对'标准实现的导航处理非常笨拙'的说法......呃,美丽的表面对JSF没有的导航没有影响。它只是将其网址映射到更漂亮的网址。它也有参数相关的功能,但我不认为它们是导航特定的。 13 6月. 142014-06-13 22:01:34

  0

这听起来像一个好主意,但是铸造调用getRequest到HttpServletRequest中会抛出以下错误: ClassCastException异常:com.liferay.portlet.RenderRequestImpl不能转换到javax.servlet.http.HttpServletRequest 好像Request()方法将返回一个PortletRequestImpl,我不知道如何使用这样的类来获取URL。 20 8月. 142014-08-20 22:41:12

+1

@Gaara:显然你正在开发一个portlet应用程序,而不是一个servlet应用程序。对不起,portlet超出了我。只需搜索如何从“PortletRequest”实例获取请求URI即可。 21 8月. 142014-08-21 05:49:06


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

请用单词解释你的答案。 17 2月. 132013-02-17 12:05:56

  0

这不会为以前的答案添加任何内容。 10 6月. 152015-06-10 20:05:47