【问题标题】:Get current page programmatically以编程方式获取当前页面
【发布时间】:2011-03-16 07:10:15
【问题描述】:

在一个 JSF 支持 bean(托管 Bean,焊接 Bean,没关系)中,我可以通过调用获取客户端所在的上下文路径

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

这给了我客户端当前访问的路径,例如/myapplication。 是否也可以获取当前页面,如/home.faces,以及如何获取?

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    好的,明白了

    FacesContext ctx = FacesContext.getCurrentInstance();
    HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest();
    // returns something like "/myapplication/home.faces"
    String fullURI = servletRequest.getRequestURI();
    

    【讨论】:

      【解决方案2】:

      您通常希望为此使用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> 中重复使用。请注意,您不能将其用作导航案例结果。

      【讨论】:

      • 这并不可靠。以 PrettyFaces 为例,这不会给出创建当前页面所调用的 URL。
      • @DoubleMalt:OP 并未表明他正在使用 PrettyFaces。
      • 虽然这是事实,但他也没有明确表示他没有。我的观点很简单,扩展 JSF 的库可能会破坏您的解决方案(PrettyFaces 是一种非常常见的增强功能,因为标准实现对导航的处理非常笨拙)。我只是想给那些发现你的干净解决方案对他们不起作用的人一个线索。
      • @DoubleMalt,Prettyfaces 应该只是一个更漂亮的 url。您对the standard implementation's handling of navigation is pretty clumsy 的声明...好吧,漂亮的脸蛋对JSF 没有的导航没有任何作用。它只是将其网址映射到更漂亮的网址。它还具有与参数相关的功能,但我不认为它们是特定于导航的。
      • @Gaara:显然您正在开发一个 portlet 应用程序,而不是一个 servlet 应用程序。抱歉,portlet 超出了我的范围。只需搜索如何从 PortletRequest 实例获取请求 URI。
      【解决方案3】:
      String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI();
      

      【讨论】:

        【解决方案4】:
         String str = ((HttpServletRequest) FacesContext.getCurrentInstance() 
         .getExternalContext().getRequest()).getRequestURI(); 
         System.out.println(str);
        

        【讨论】:

        • 请用文字解释你的答案。
        • 这不会在之前的答案中添加任何内容。
        猜你喜欢
        • 2015-05-12
        • 2011-07-17
        • 2017-07-28
        • 2012-10-20
        • 1970-01-01
        • 2011-01-31
        • 2011-06-16
        • 1970-01-01
        相关资源
        最近更新 更多