在JSF bean中获取请求URL?

Ada*_*dam 19 java jsf servlets

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

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

编辑:功能要求这里的要求是我们需要第三方JavaScript实用程序的完整URL.该实用程序的使用或体系结构不适合JSF,但是这个调用的所有内容都没有.我发现的方法会起作用,但是如果深入挖掘FacesContext则感觉不对.另外,我希望有一种可以用JSF表达式语言调用的方法,因为它将以"视图"相关的方式使用.

Bal*_*usC 31

如果你需要从JSF引擎盖下运输原始的Servlet API FacesContext,那么很可能你在错误的地方做了工作.这是什么,您认为这是正确的解决方案的功能要求?您是否应该使用真正的Servlet类或Filter代替JSF托管bean?或者可能根本不需要请求URL,因为有更好的"jsfish"方法来实现相同的目标?

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


根据您的编辑进行更新:那么,您在视图方面是否只需要它?比如#{bean.requestURL}?您也可以从HttpServletRequest已经隐含在EL中的对象中获取它.

当你在使用JSP时:

${pageContext.request.requestURL}
Run Code Online (Sandbox Code Playgroud)

或者当你在Facelets上时:

#{request.requestURL}
Run Code Online (Sandbox Code Playgroud)

现在,你如何需要JavaScript?打印为JavaScript变量?像这样?

var url = '#{request.requestURL}';
Run Code Online (Sandbox Code Playgroud)

如果是这样,你也可以抓住window.location它.

var url = window.location;
Run Code Online (Sandbox Code Playgroud)

不需要使用视图特定的细节来混乱JSF bean.