Java 在JSFbean中获取请求URL?

Java 在JSFbean中获取请求URL?,java,jsf,servlets,Java,Jsf,Servlets,如何在支持JSF页面的bean中获取请求URL?我一直在浏览FacesContext文档,我能找到的最好的方法似乎非常长: public String getRequestURL() { Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest(); if(request instanceof HttpServletRequest) { re

如何在支持JSF页面的bean中获取请求URL?我一直在浏览FacesContext文档,我能找到的最好的方法似乎非常长:

public String getRequestURL()
{
    Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
    if(request instanceof HttpServletRequest)
    {
            return ((HttpServletRequest) request).getRequestURL().toString();
    }else
    {
        return "";
    }
}

Edit:Functional Requirements这里的要求是我们需要第三方javascript实用程序的完整URL。该实用程序的使用或体系结构不适合JSF,但除了此调用之外的所有功能都适合JSF。我找到的方法会起作用,但深入到FacesContext中去感觉是不对的。此外,我还希望有一种可以通过JSF表达式语言调用的方法,因为它将以“视图”相关的方式使用

您已经有了答案:)恐怕您必须这样使用它,因为每个HTTP请求都必须从faces上下文中检索。当然,您可以简化此方法的某些部分,如faces上下文检索,但这肯定是一条路,除非您使用某种框架抽象掉这些细节,并让您直接访问HttpRequest对象


注意。

如果您需要通过
FacesContext
从JSF引擎罩下拖出原始Servlet API,那么很可能是您在错误的位置完成了这项工作。您认为这是正确解决方案的功能需求是什么?您是否应该不使用真正的
Servlet
类或
Filter
而不是JSF管理的bean?或者您根本不需要请求URL,因为有更好的“jsfish”方法可以实现同样的效果

如果您更新您的问题以包含有关功能需求的详细信息,那么我们可能能够建议正确的解决方案


根据您的编辑更新:那么,您只需要在视图端使用它?例如,
{bean.requestURL}
?您还可以从
HttpServletRequest
对象中获取它,该对象在EL中已经隐式可用

当您使用JSP时:

${pageContext.request.requestURL}
或者当您使用Facelets时:

#{request.requestURL}
现在,JavaScript如何需要它?作为JavaScript变量打印?像这样

var url = '#{request.requestURL}';
如果是这样,你也可以抓住它

var url = window.location;

无需将视图特定的细节与JSFbean混为一谈。

感谢您清除了所有提取它的各种方法!我最终能够解决这个问题,但我会使用window.location